summaryrefslogtreecommitdiff
path: root/content/bsd/why-not-bsd.md
blob: 2569094199dcd966cad551546b25b3a76ff849fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
+++
title = "BSDs may not be a system for you"
author = ["Michał Sapka"]
date = 2024-04-20T22:13:00+02:00
categories = ["bsd"]
draft = false
weight = 2003
primary_menu = "bsd"
image_dir = "bsd"
image_max_width = 600
abstract = "Reasons why BSD may not be the best OS for you"
menu_item_override = "perhaps you shouldn't"
menu_item_override_end_li = true
[menu]
  [menu.bsd]
    weight = 2003
    identifier = "bsds-may-not-be-a-system-for-you"
+++

Changing GNU/Linux distribution can be done on a whim, as underneath all of that you've got the same basic operating systems.
With BSDs it's not the same.
One should try to understand the downsides, as not to waste the next 20 years exploring an OS that simply is not a good fit.


## Hardware {#hardware}

All BSD are much less popular than GNU/Linux[^fn:1], and with this comes the most pressing downsides.
The support from hardware vendors is, at the very least, problematic.
You will have problems with recently released components; most likely your WiFi card will not work.
Your graphic card may have drivers, but they may work much slower.
One needs to deeply examine hardware at hand and make sure it is supported by the chosen OS.
As an example, my laptop has an NVIDIA card hardwired to HDMI-out, so if I want to use an external monitor, I need to use this card.
While this works on FreeBSD, there is no support on OpenBSD.
Another example would be the Intel wireless NIC which I had to physically replace[^fn:2] to not get constant Kernel Panics.
It goes without saying that power management is also a problem, but it's a problem on GNU/Linux as well.

The lackluster support from vendors is handled by volunteers who try to reverse-engineer the hardware.
And here comes another problem - it's **very** hard to back port anything from GNU/Linux kernel.
There is a huge difference between what GPL and BSD license allows.
And even if that wasn't the problem, the GNU/Linux driver land is full of closed blobs.
You could have thought that if something is supported there, it has a beautiful open-sourced drivers.
Nothing further from the truth.
Ever wondered why GNU's GUIX doesn't support Nvidia?
That's because the drivers are provided as blobs, and therefore closed-source.
As a result, the work needed for BSD support is difficult and slow[^fn:3]<sup>, </sup>[^fn:4].


## Software availability {#software-availability}

But let's assume this is not a problem in your case.
You have been blessed by the Gods of Hardware Support.
You've installed the system: your GPU is calculating pixels, your air is full of bits and waves.
Next step?
Software!
And hello to another problem: software support.
Most popular software is not compiled against BSD operating systems.
VS Code? Steam? Microsoft Office? Firefox?
Those programs may be essential for your work or evening.
_BSDs on desktop_ crowd is not significantly large enough for companies to want to deal with us.
We are not completely lost here, as BSD is POSIX-compliant, so it's possible to compile everything that's running on GNU/Linux.
It requires changes and a bit of luck[^fn:5] but any open-source application can be run.
Unfortunately, since we are not using GNU/Linux, all hacks that make software run fast there may now work here, or even create huge problems.
Firefox on FreeBSD is a huge pile of patches layered over each other.
I have no idea how much work is required to support it, but it's somewhere between "big" and "have mercy".
About that closed-source ones?
No Office for you.


## Help {#help}

Let's once again allow our imagination run wild and assume all software you use is there, but you have a problem.
You try to Kagi[^fn:6] it and nothing.
Nada.
GNU/Linux has plethora of sites, blogs, and vlogs.
Any problem you may encounter, someone else already solved and documented.
In BSD you are expected to read the manual.
But wait, you may ask, RTFM?
That's rude!
It is, however, true.
Since all BSDs have best in class documentation, it is assumed that you will look for help there first.
This also means that trivial problems may not ever find themselves a subject of any blog post.
Unfortunately, non-trivial ones are also often not documented.
The community is friendly and will help you, but you need to do the homework.
Since the community is small, it may take some time/luck, but someone will help you help yourself.
When GUN/Linux may be used by someone who has zero knowledge about the inner workings of the OS, BSD will not be so kind.

Notice how I, like a gentleman, always mention GNU when mentioning Linux?
Well, BSD teaches you why you should.
Since BSD and Linux use different userland software, they are not compatible.
And while yes, basic usages of such programs like ls, cat, awk is the same, GNU likes to add a lot of custom extensions.
You can assume that **only POSIX** requirements are met.
As a result you will find answers for your question on the interwebs which will not work for you, as they are written for GNU-flavored tooling.
Unfortunately, POSIX is a weapon for a more civilized age.
Folks these days assume _a lot_ and BSDs don't even come with ZSH out of the box.
Ever used the basic _Shell_?
Too bad, as _Shell_ is what you should assume in all your scripts.


## Pce of change {#pce-of-change}

Next: do you like to call yourself an _early adopter_?
Being in the _bleeding edge_ is what gets you going?
BSD are evolving slowly by design.
If something works, let's leave it alone.
That's the mantra.
GNU/Linux is changing rapidly - Pipewire, Wayland, SystemD.
Even good old _ifconfig_ is being deprecated.
At the same time BSDs still use technology from decades ago[^fn:7].
There was never a need to replace them, so no one did it.


## It's Linux, right? {#it-s-linux-right}

And lastly, prepare for a lot of raised brows.
Younger folks may have never even heard of BSD.
Rocking their MacBooks they don't know (nor care) about its FreeBSD roots.
Very few people I have contact in the meatsphere have ever seen a BSD system, and it's not that easy to explain that it's not Linux.

You can think of the problems as something one may have had trying to run RedHat on a computer with a winmodem back in 1999.
It's not an OS that gets out of the way allowing you to get stuff done.
You need to _enjoy_ making it work for you.
Otherwise, all you will find is annoyance and a swift OS change.

[^fn:1]: I won't even mention proprietary OS, as they are irrelevant here.
[^fn:2]: I tried to record my fight with having my Thinkpad working under FreeBSD [here](https://michal.sapka.me/bsd/thinkpad/).
[^fn:3]: I won't pretend to understand it, but as to the best of my knowledge:
    those closed blobs are part of Linux kernel.
    They are not strictly _drivers_, as drivers are how the OS communicated with the device.
    Instead, they are _firmware_ which run on the device itself.
    Both of those parts need to work together as to not fry the device.
[^fn:4]: As a sidenote: having _closed_ standards is my definition of a dick move.
    Not only the way the device is hidden, but also how something like WiFI is.
    It's very hard to read the exact spec of modern WiFi standard, and it's most definitely illegal to use that knowledge without a paying a crazy amount of money.
[^fn:5]: BSDs have collection of such converted software called _ports_.
    They are supported by volunteers, so your mileage may vary.
[^fn:6]: Are people still using Google?
[^fn:7]: Not going on breakneck speed is one of huge driving factors towards BSD.
    It's a good thing, I promise!