NetBSD features you may have missed
It’s not secret NetBSD is the smallest of the three contemporary modern BSDs (FreeBSD, OpenBSD, NetBSD, intentionally ignoring PC-BSD/TrueOS). Many don’t give NetBSD any more thought than ‘oh its the one that can run on a toaster’ (which is true as long as it has a MMU :)
here )(Full article
There are some interesting features that are useful on desktops as well as embedded that deserve being mentioned. I list some of the features that caught my eye in no particular order. Also in no way are these unique to NetBSD (well mostly), but some may surprise you.
Lua kernel / ring0 code
I’m not sure how popular it is or if its really used, but it is a possibility to write kernel modules in Lua. This is pretty darn cool and lua support in the kernel is the fruits of a previous Google Summer of Code (GSoC) project.
For Lua to work, you need to load the lua and lua sytem modules:
# modload lua # modload luasystm
Then you can create a Lua state and load a script like so:
# luactl create state1 # luactl require state1 systm # luactl load state1 ./luahello.lua
You can find full examples here Def checkout
CGD disk/partition encryption
CGD (Cryptographic device driver) lets you encrypt disks at an entire disk or partition level. Of course, this is nothing new, but it has more flexibility for key sizes and available ciphers versus, eg, OpenBSD. This may no longer be true
rump kernel drivers in userspace
NetBSD Rump kernels offer many benefits, of particular interest is being able to compile kernel drivers and test it in seconds without using a VM. In simplified terms, it is basically the various drivers that usually live in kernel space, but running as separate entities in the rump kernel userspace.
Rump kernels are not an operating system specific concept, for background see What is a rump kernel? NetBSD ‘anykernel’ is (was?) the first implementation of a usable rump kernel though. It has a funny name to boot
pkgsrc can do some cool stuff
I have to admit I’m just starting to dip my toes in
pkgsrc. It’s a solid package manager, downloading and compiling sources for you and managing deps, as you would expect of a package manager in 2018. It has some lesser known auxiliary features:
- Portable, you can use it on other BSDs as well as Linux!
- Built in tools for auditing vulnerable software with
- It can check licenses if you care about that. Eg warn/disable installing XYZ license software.
Veriexec - Ring0 binary/file/data verification
In layman terms, veriexec compares binaries and files to a pre-configured whitelist of hashes and refuses to run any that diverge. While this would require a bit of setup (and would be annoying for casual daily desktop use), you could really lock down a machine with this setup that would be resilient to even root privilege escalations.
With the state of MD5 and SHA1 hashes being worthless for integrity and having vulnerabilities and proof of collision respectively, it supports SHA256, SHA384, SHA512, and RMD160 hashing. There are a few levels of strictness which can make the machine dynamically learn or report in an IDS style of operation as well.
Sane config/directory hierarchies and other non-technical things
This is not so much a feature as my personal preferences, but on NetBSD you get things like a sane, centralized
rc.d startup system. No 6 runlevels, no systemd, no having to rifle around to find defaults.
/etc/rc.d after looking at
/etc/defaults/rc.conf and be done with it.
Additionally, third party stuff always ends up in
/usr/pkg and their configs go in
/usr/pkg/etc. While GNU/Linux isnt awful, I am annoyed switching distros and having no idea where things go, install to, overwrite, etc.
Being able to install an entire system (with X) using an installer under 350mb is unheard of in this day and age too. I’m pretty sure the Nvidia drivers are bigger than that now.