1. Introduction Of the three major *BSD flavors, FreeBSD and OpenBSD are often in the spotlight. FreeBSD is touted for its stability, while OpenBSD usually claims the title of the most secure operatin system available. However, the third flavor (NetBSD) is what many consider to be the unsung hero - it has features that rival those of both FreeBSD and OpenBSD however is not often seen in the news. NetBSD has arguably the cleanest code base of all open source operating systems this fact has unforseen effect on its overall features. The reason for NetBSD's clean code is the its stated goal to run on as many hardware architecture as possible. In order to do that, the team behind NetBSD has been forced to write code that is portable and easy to debug. Portable code is achieved by using mostly libraries and functions that are likely to compile and run well on most platforms. In addition, in order to be able to reliably port the code to over 40 different architecture, the code has to be well written so that a large group of people can look at and understand it well so they can modify it easily and port it to a new architecture. But how does that translate into stability and security touted by FreeBSD and OpenBSD respectively. Well, clean code usually translates directly into stability - one can't expect a messy code to perform well or be easy to debug. Clean code also leads to improved security - security bugs are easy to spot and correct. Also the portability of the code ensures that only standard libraries and functions are used. However, those standard libarries and functions are the ones that have been around longer, which means they have been well tested and are likely to contain the fewest number of security bugs. The one feature that FreeBSD had long been able to claim exclusively is that in terms of performance it blows all other *BSD flavors out of the water when it comes to the i386 architecture. However, this crown was recently captured by NetBSD thanks to an extensive performance benchmarking, the results of which are referenced on the section "NetBSD tools" on this site. So to sum it all up, NetBSD is no longer simply the portability prodigy on the block. It is a fast, rock-solid and secure operating system that can successfully meet the demands of the modern enterprise. That's the reason for it being used by the people behind this project to build some tools that will hopefully be useful. 2. polyBSD The name of this tool was coined to signify the fact it is a "multi"-purpose (hence "poly") framework. It is essentially a minimalistic install of the latest stable NetBSD version, designed to run from a compact flash card or a USB memory stick. Most modern hardware supports booting from a USB port or a PCMCIA slot containing a memory card. So, polyBSD gives you a solid base, which you can use to build your own system based on NetBSD. How to achieve that? Download the compressed image file, write it to a 256MB (that's what the size of the image is) USB memory stick, stick it into any computer (i386) capable of booting from a USB port and you have a working platform that you can use to build on. NetBSD has a package management system called "pkgsrc" and large number of precompiled binary packages. All you need to do is decide which packages you want to install and then execute "pkg_add pkg_name". If your computer is connected to the network, the command "pkg_add pkg_name" will fetch the package from an FTP site and also install all dependencies that the package might have. So a command like "pkg_add firefox" will handle everything for you and install the latest version of Firefox available for NetBSD. The polyBSD image comes with two users - "root" and "polybsd". The password for both is "polybsd". polyBSD also provides you with two custom compiled kernels with support for all network cards (including wireless), and all filesystems that NetBSD supports. In addition, support for the widely recognized Cryptographic Device Driver (CGD) has been included so that your system supports block device encryption. The two kernels are identical except for the fact that one of them is compiled with support for multiprocessor (SMP) systems. The default kernel is uni-processor, but you can easily change that. Once polyBSD boots up and you login, you can find the kernels in the "/" folder. The default kernel is "/netbsd" and the SMP kernel is "netbsd.mp". If you want to try out the SMP kernel then execute the following commands: "cd /" "cp netbsd netbsd.old" "cp netbsd.mp netbsd" and reboot the system. If something goes wrong and the system doesn't boot, follow the instructions described here: http://www.netbsd.org/guide/en/chap-kernel.html#chap-kernel-something-wrong If everything goes well and the SMP kernel behaves well on your SMP system then you can delete the "netbsd.old" kernel. This will give you more free space so you can install more software on the USB memory stick. Remember, you have a 256MB memory stick. The polyBSD system takes about 130MB, so you have about 120MB free that use can use to install packages with "pkg_add". You can get even more free space by deleting man pages and other files that are not essential for running the system. 3. pocketSAN This tool is a direct example of what polyBSD can be used for. pocketSAN is a fully functional NAS/SAN solution with RAID support that is sompletely free and fits in your shirt pocket. The tool includes support for the iSCSI protocol (which is the basis of most commercial SAN solutions) which allows you to set up so-called "iSCSI targets", CIFS/Samba (Windows-type file sharing) and kernel-level RAID support. In addition, pocketSAN contains a number of disk, backup and network management tools so you can further improve your SAN performance. For Samba management, pocketSAN provides the web-based Samba Web Administration Tool (SWAT). It will be listening on port 901 once you boot pocketSAN. So simply plug the USB stick with pocketSAN into any computer, add some cheap or old hard disks and you can build yourself a commercial-grade SAN with RAID support for absolutely free. For a quick guide on how to set up your iSCSI target, read these two links: ftp://ftp.netbsd.org/pub/NetBSD/misc/agc/HOWTO-iSCSI-target.txt ftp://ftp.netbsd.org/pub/NetBSD/misc/agc/HOWTO-iSCSI-initiator.pdf Note: In the first link under section "1.2" the command to start your iSCSI is "iscsi-target", not "iscsi_target forcestart". 4. How to start Download the polyBSD or polyBSD compressed image file. Uncompress the file. For instance - "gzip -d polyBSD-0.1.img.gz" Plug your USB memory stick in amd find out on which USB port it is attached. The command "dmesg" should give you this information. Assuming the USB in the first USB port then your USB device will be "/dev/sda1" if you are using Linux, and "/dev/sd0" if you are using NetBSD. If you are using NetBSD and you have saved the uncompressed image file in "/root", then the command to write the file to the USB device is "dd if=/root/polyBSD-0.1.img of=/dev/sd0d bs=1m". Note the "d" at the end of "sd0". It must be present or the write process will fail. Under Linux, the command will be "dd if=/root/polyBSD-0.1.img of=/dev/sda1 bs=1m". Depending on your hardware, this process can take up to an hour. For systems that do not have a high-speed USB 2.0 port, writing a 256MB image file to a 256MB USB memory stick takes about an hour. Once th writing process completes, reboot your system and use BIOS settings to tell the system to boot from the USB port. On a Dell system this is usually achieved by pressing the F12 key when the initial boot screen appears. If you are having problems, contact me at "haidut (at) gmail_DOT_com".