pin
pin I've always felt attracted to smaller projects,
yeah, me too, for several reasons, among the others:
- they're usually underestimated and undeservedly played down
- they tend to attract the sort of people capable of thinking out of the box, who do not blindly follow trends, and, at the same time, those moved only by sincere passion, rather than a political stance, hype or economic return ....
- they can often boast some unique, unconventional, attracting, non-mainstream ideas which are a true joy to play with for a nerd like me.
pin I still want to use my computer (hyperthreading), so Open was not the top choice
Realistically speaking, for the limited use case of a medium-end desktop or a low-end home server, SMT doesn't affect performance in a significantly noticeable manner, and it can be re-enabled at any time on OpenBSD either way. For the record, I have smtoff=YES in /etc/rc.conf on my NetBSD servers. I may not be the most suited and definitely not the most competent person to tell this, but I think the problem with performance on OpenBSD are rather the giant kernel-lock (malloc() allowing no more than one thread in the allocator at a time), the outdated 4.4BSD scheduler, their poor SMP implementation, the overall 'hardening, sandboxing, resource limits, memory protection, encryption, randomization, privilege-escalation prevention, exploit mitigations, stripped-down codebase...' approach designed to enhance security even at the expense of performance and features, the perl-based packaging system, the lack of TRIM and tmpfs support, their sole virtualization suite being limited to 1 CPU, soft-updates being disabled by default, their general total absence of interest in anything related to performance, including the TCP/IP stack; and to this you can finally add no default hyperthreading.
So yes, all the times I tried OpenBSD in the past, it always felt a bit slower than anything else. Sometimes it's more noticeable, sometimes it's not, depending on your hardware (the more powerful the hardware, the more evident the gap), the architecture, your setup and your actual use case (avarage load, concurrent tasks, network traffic and what else).
Yet, AFAIK SMP on OpenBSD got great improvements starting with 6.0, and as I was reading the 6.6 release notes the other day, I noticed they're unlocking a lot of stuff; they also introduced Vulkan support, which is great....thereby chances are high I'd end up surprised by OpenBSD's performance if I tested OpenBSD again on a spare machine.
Another problem with Open, is some apps randomly segfaulting at runtime due to the restraints of which above, but this a problem of 3rd-party bad software design (and should be a concern for the respective developers), not OpenBSD's fault...yet, it can result troublesome (@pin your case with xchemtool on NetBSD is a good comparable example).
Anyway, we're not here to talk about Open, but why one would opt for NetBSD, so here's my main reasons:
- simplicity: pure retro UNIX feel, most things done by editing conf files
- lightweight; no doubt here, Net is really the king of lightweight, runs on '80s CPUs with a bunch of MBs of RAM
- portability, serious effort continously made to keep everything cleanly split into 'Machine Dependent' (MD) and 'Machine Independent' (MI) areas; think we don' t need further argumentations here. I'm particularly referring to real support for SPARC, ARMv-8, m68k, SGImips, MIPS evaluation boards, macPPC, DEC Alpha, Amiga, NeXT, Sony NEWS, Dreamcast
- same simple and fast packaging system on all platforms (NetBSD, Linux, macOS and Illumos) and archs, with a well-optimized and easy to deploy toolchain, high-level cross-compilation capabilities, ease at packaging and good likelihood of getting stuff packaged in case you need at and ask.
- outstanding ABI
- modularity (rump kernels, installation split in independent sets, modular X)
- virtualization: used to run a QuesOS-like Xen dom0 on Net, now I'm moving to NVMM; then you have HAXM, alongside NVMM, to use as desktop-oriented hybrid hypervisor by using QEMU as frontend in both cases; a reliable Linux compat layer with a good set of supported syscalls; decent wine support (FreeBSD's implementation is better, while it is not available on Open and DragonFly)
- journaled (see WABPL) FFSv2 with snapshots and TRIM, CHFS for flash memory, LFS, ZFS for storage as of 9.0
- nvidia support with nouveau(4)...crucial to me as practically everything I own is equipped with Nvidia discrete graphics
- acceptable bluetooth support, the only BSD capable of making my bluetooth keyboard work
- ARM: armv5/6/7, armv8 (aarch64)...Net generally is really ahead here in terms of hardware support, stability, maintenance, availability of binary packages, and this is a major concern of mine as tend to rely on cheap ARM boards for a home 'server'
- NPF, the firewall I'm fond of most, but I may be biased, since it's the only I really know how to use, hence the only I feel confident using. I like its syntax, the 'procedures', the NAT routing system, it's being BPF-based and using BPFjit, its integration with blacklistd(8) and pcap-filter(7), its dynamic extendibility with Lua scripts.
- good performance (doesn't keep up with Linux, Solaris or FreeBSD), with its more modern SMP, fine-grained lock, the Solaris-like M2 sched, the firewall optimized for performance and...
- good security: kauth, several modern exploit mitigation in place (ASLR, KASLR, SMAP/SMEP, PaX Segvguard, PIEs), pkgsrc hardening with a fine tracking of vulnerabilities and patches promptly available on quarterly branches, not only the rolling current, a good encryption module (CGD) , the veriexec subsystem, the kleak suite to discover kernel memory leaks, NPF, blacklistd, sane defaults... even though it's still clearly behind OpenBSD
- kernel built-in mixer, using audio(4) abstraction layer based on Solaris SunAudio, which undoes the very need for a userspace-level sound server (pulseaudio, jack, sndio, esound, nas) in standard desktop scenarios, something unheard on other Unices
- many interesting features to experiment, play with, and implement in various setups, like rump kernels and Lua scriptability
- welcoming and fun community capable of autocriticism, no fanboysm or elitism, good help support on mailing list, no strict RTFM
- no NIH syndrome, nor obsession with removing GNU/GPLed code, and yet all native stuff (the large majority of base system) being BSD-2-CLAUSE licensed