The djb way (2007)
thedjbway.b0llix.net
thedjbway.b0llix.net
Much more people would be able to do that if they:
a. Stopped using buggy dependencies b. Focused on the task being solved instead of on the technology
djb lives in a quaint fantasy toy land where he gets to write whatever he wants and doesn't have to interface with real world systems at scale. That's great when you're the author. Your software can be clean if you only write for yourself and not for 50 million other programmers trying to build software on top of your tools as well. But, it's painful when you're a user and real world problems get ignored because the author just never experiences your same problems (so they never care to fix them).
Much like how a startup isn't 90% code and 10% "company," public software in 2015 shouldn't be 100% writing code all day then dropping .tar.gz files on a server once every two years while ignoring wider principles of project governance, collaboration, and feedback/growth processes.
Rather than learning how upstart or systemd unit files work and learning their configuration languages, you only need to know how to start a process that runs in the foreground and logs to stdout.
[Service]
ExecStart=*path to process*
Learning the language is only necessary because some services are more complex. For example, if you need your process to only start after another, you must now learn the syntax of runit's sv program.Publicfile and ucspi-tcp might not work "at scale", but qmail, ezmlm, djbdns and daemon-tools certainly work even for very large deployments. I would agree that qmail and ezmlm benefits from the patch-set floating around.
It seems interesting in the same strange way http://suckless.org is interesting. A certain pleasure can be found in running a website as a 300 line C program, but it's not very useful besides that.
Likewise, the suckless tools are useful in that they just work. That's pretty useful too.
In other words, presuming a given program was shipped to you as a source package, your package management system could contain a pass from a generic program that takes the software "seed"—the generic version that does a lot of things—reads a configuration file specifying your particular use-case—and then hardcodes policy-level choices like protocol flags, strips out every code path that you won't be invoking, removes conditionals altogether where only a single path is left, inlines functions that have then been made trivial, etc.
It would be sort of like a version of autoconf that works at an AST level; but also built on the expectation that you'll be able to run it again to generate a new binary if your business needs change, rather than just serving to enable you to cook up your program with whatever nasty ingredients are left in your OS's fridge.
The result of such a source-transform pass should be something like one of the djb programs: a terse piece of code to achieve your particular goal. Ideally, you would then take that program and read it before using, because, well, if your particular goals are reasonable, then the code should be small enough to fit in your head!
On a tangent, the "unikernel" philosophy, as I understand it, is simply that if you could throw the entire kernel + OS + your application into such a goal-oriented streamlining woodchipper, a unikernel application is what would result.
Look, djb is a damn good programmer and writes some amazing, reliable software. It's just not all that user or admin friendly. I'd go mad in a world where everyone used his 'world class' ideas on software...
djb's software is, in fact, quite user and admin-friendly. However, most people simply aren't used to the modular toolkit approach way of doing things beyond basic text processing. The djb philosophy is really the Unix philosophy, and so it comes off as quite shocking to see software written like that when you're used to monolithic blobs.
But there is so much insight to be gleaned that, unfortunately, most people ignore precisely because to them user friendliness means building inflexible kitchen sinks. I especially do not consider the latter to be admin-friendly in the slightest.
Because it lets the implementation be independently reusable as a filter. Furthermore, there are some caveats about converting TAI64N to localtime, so having the admin be aware is desirable.
Having to pipe a program isn't "making life difficult for humans," I have no idea how you came to that conclusion.
Further, nothing is stopping any implementation be independently reusable, whatever the choice of format. That's an irrelevance.
Essentially, it's not a technical decision. Trying to back up your preferences with tech reasons is besides the point. I just think that anything that makes it more difficult for a person to read the log files is a bad choice. If you can choose who has to do the extra work, human or computer, you should always let the computer do it.
Maybe, but look at the date display code in the GNU core-utils for instance, it depends on the locale and everything, not quite minimalistic.
I understand your point but it is inconsistent with the rest of djb's way. It does not mean that it is invalid in general, but that this "human-unreadable" log files in djb's code are actually a good idea in the mindset/framework of djb's code.
By putting timestamps in log files, and requiring humans to type a few more keys to transform it when they need to, every one can choose its date format, timezone, and language. So, to me, djb's way is the human-friendly way.
So, efficiency still matters today if you're squeezing the most out of your systems or like physical isolation like I do. Easy, portable processing on arbitrary machines, too. Human readable logs can have an impact on that. A nice compromise, though, is stuff like JSON, s-expressions, or a TCL style with abbreviated keywords.
Therefore I'm really flipping your buzzword and using it against you. There are no HIGs for system software, and more often than not "This is user friendly." is a codeword for "I'm biased into thinking this way." It's not a criticism, it's a thought-terminating cliche.
If you have technical criticisms of djbware, that'd be fine. You evidently do not.
(That said, I do think it's generally accepted that system software disobeying you by making policy decisions you have not authorized is not admin-friendly. djbware excels at being mechanism only.)
That is a reiteration.
Either way, neither of us are saying anything of substance.
[1] http://techblog.netflix.com/2013/03/ami-creation-with-aminat...
[2] https://github.com/nebula-plugins/nebula-ospackage-plugin
* http://cr.yp.to/qmail/qmailsec-20071101.pdf
* https://news.ycombinator.com/item?id=9250118
Even to the writing of Aaron Swartz.