also info

nobody knows enough from reading manuals for UN*X because it is too hard. everyone I talk to who says they have done it are still missing fundamental info, like for instance any one i talk to will probably not undersand that sudo is insecure for 99% of use cases and start crying when i explain to them that you can just use ptrace to capture the password or replace some bash envars to hijack the command. nobody knows how to declare a variable in a signal handler (see signal handling for fun and profit), because there is no comprehensive overview of C called "stuff you should know before actually programming in this".

the problem with trying to learn a UN*X system from within is that everything is scattered everywhere, and there is no comprehensive overview of any part of the system (they try to make some, but they are always missing something important, or dont mention how this would work in the context of a practical system where other subsystems change the behavior and requirements of this one), and the parts which take too long for anyone with a life to learn are always changing, like in linux ip tools, iptables/whatever alternative, and PAM, init (init is hard because you have to learn about how to manage environment and session properly which involves some tens of pages of man pages enumerating subtle details) systemd, pulseaudio. every tool has its own DSL for the trivial task of accepting parameters and parsing configs. to use apropos you first have to setup some database thing (yeah i dont remember).

learning C libs from the man pages is a perfect example. to do trivial stuff requires some hours of reading every day, and when you come back to use those functions again you will not remember most of them and have to look them up again, and they are:

- full of irrelevant info, the "BUGS" section, the "examples" section, conformance issues (which are not something you have in other languages' libraries),
- unneeded "this and that is UB" followed 5 minutes later by realizing 5 other things they did not write about is UB followed by philisophical pondering about why they list one UB when you still need to think for yourself to know what is actually UB, etc.
- 10 different ERRNOs. you need to read all of them in case there is some fundamental info listed there and not elsewhere in the man page you are reading
- some wacky crap like sockaddr_t with casting or an integer split across two parameters (btw socket programming in itself is its own clusterfuck to learn from man pages alone. yes i have done it on one foray into socket programming)

which is why C is not suited for general purpose programming - it has too many edge cases for anyone but the most very strict programmers (most of whom consider themselves to be so are in fact not) who already worked on 3 big programs. you cannot use this for 10s of thousands of lines of CRUD like what gnome or whatever does. the average open source UN*X C program is a buggy mess.

then there's also the problem that you can't do anything in UN*X without learning at least 5 different programming languages. this also means you will not have rigid understandings of them all and make common easy to spot bugs. or you can spend hours a day reading about every expression you will invoke and get fired.

one time i had to setup a secure system with some C glue code involving a socket. it took 2 or 3 days to be somewhat sure i am not invoking some kind of UB in this 100 lines of code and that all my file semantics (permissions, timings) were right (also another source of huge complexity for something that should be trivial).

UN*X is a pyramid scheme. whenever you complain about it, someone will say "you're just not man enough to have learned it properly". no matter what you do there will always be this theoretical case of someone more manly than you who has succeeded in UN*X (whatever that means). go try again for another 2 years. of course this is all nonsense, as the averge joe dev or sysadmin in the industry does everything laughably wrong unless there is a meme circulating about how to avoid problem #3527.

did i explain this enough yet? UN*X is an absolute clusterfuck. its not coherently designed in any way what so ever. to set screen blanking parameters on linux, you write some text to the terminal. this is therefore considered """UN*Xy""", because it has something to do with 2 of their major fetishes. this is the level of insanity that is considered normal.

tl;dr you simply cannot learn a UN*X system sufficiently to be able to have a grounded understanding of it as well as being a productive person. perhaps you can dedicate your life to creating a JSON parser after you graduate UN*X and then die of old age.