Sonntag, 4. Februar 2018

Wanted: User friendly, maintainable, secure

Quite a few people have asked the question, why systemd has "won" the "init wars".

Because, even if its proponents might claim otherwise, systemd is not a product of quality software engineering. It has large internal module interdependencies and often uses quite questionable, hard to maintain coding patterns. The solution paths chosen often lean towards complexity rather than maintainability.   The APIs it exports  are often designed with a careless disregard for separation of concerns. This is accompanied by a lack of design documentation and developers using aggressive rhetorics to avoid giving proper rationale for their design decisions.   On top of that add syntactically and semantically poor configuration formats that are built with implicit, often underdocumented automagic. Systemd has too little internal structure and much too much nonchalance with regard to interface semantics.

And, yet, almost nobody cares.

Because systemd makes a lot of features available at our fingertips that you previously needed to hack into init scripts, needed to configure your logging for and/or were not available at all using proper command line tools.

For the casual administrator or devops person, the fact that those feature are often implemented using large spaghetti functions in a largely monolithic code base, that some of systemd's implementation details are clear security regressions from previous SysV behavior does not matter. Basically, given a simple interface that promises ease of use and lies to you about the actual implementation quality, the quite a few members of the community hashave willingly walked towards the lies and even spreads them unverified.

And that may be also one of the reasons, there is no real, clean alternative to systemd, yet. Implementing the feature set that systemd provides in a clean (maybe even portable) manner without taking more than the usual amount of shortcuts is a huge task. It requires a lot of thinking, it requires a lot of interface design, and --in the end-- a lot of code.

And it is not fun competing against systemd, because systemd mostly seems to only pays lip service to proper software engineering. Competing against systemd is essentially competing against a (habitual) cheater.

And you, the community" the do-ocracy, favors the cheat, because it gives you results more quickly. Code counts even if its shitty, as long as it's working.

4 Kommentare:

  1. There are a lot of people (even the ones who reguarly contribute to systemd) that are not really happy with how some things have turned out. Overall, I still believe it's much better than sysvinit in some ways, but I do find things I get annoyed about from time to time. It's certainly not something you'll love while using. It's just that we're getting our work done until there's anything better. However, I don't agree with your assertions that it solely won through an aggresive campagin luring distribution by distribution. People only get to know about the decision made in the end, and the details were left to rot and remain unnoticed. People probably focused mainly on the debian debate that went for some time. It's hard to write so much code, and some core ideas with systemd are not that bad. At this point, I'm fairly certain systemd will be replaced at some point, but I'm not sure when, or how early. There are some fundamental issues that people don't pay much attention to (users never really do, and that's not the case with systemd alone), things are racy, and yes, most of us realise the "Come, let's discover the glorious future" speech patern. Most proponents you encounter are people who'll be there, always, with systemd or with anything else. The number of them (or probably the vocal ones) has grown since but there are still a lot of people in the community who acknowledge issues and even call out. You shouldn't undermine them. If anything, I consider systemd a lesson, we learnt a few things, we're learning more. We made huge mistakes, but we'll improve them as we go on. That is how it works. We all remember devfs, hald, and so on. The linux community has always been rather hasty with ecosystem changes, which will continue in the future. And I don't think that's a bad thing. We must also agree that something which is just good enough to work is bit hard to supplant (Unix vs Plan 9) even when there are better alternatives available. systemd for the average user is easier to work with, no doubt, but some of us (me atleast) you like to turn around every knob, USE flag, often find ugly corners. I know that you don't find the way all of this is happening very nice, but I'd rather like if you continued on providing feedback, a little (?) of what you've described has resulted in changes made here and there.

    AntwortenLöschen
    Antworten
    1. I'm sure that "Almost nobody cares" doesn't contradict "there are people who do care". But yes, it is important to continue to make those voices heard and to make sure that certain folks do not simply get away with calling them a solely "vocal minority". Because being a vocal minority does not make one wrong.

      Also, yes: systemd is a lesson, but I do not think it is currently a lesson that falls unto listening ears. Because it --among all the technical problems it carries- an inconvenient side-message: the community as a whole is no less susceptible to propaganda bullshit than the general public. Maybe even more so, but for different reasons.

      I know that some of the stuff I personally did affected some changes. All of these changes have been unsatisfactory, but they have been done. So, curiously, dealing with systemd makes me feel like having to deal with a rebellious teenager: You have things done things "your" or even the "proper" way, but you can get some stuff done. It usually results in a lot of arguing around, petulant pouting and (passive-)aggressive resistance, but you get some stuff changed.

      And, yet, that somehow still makes me sad.

      We alos should not forget, what's currently happening: Cars are rolling out that run GENIVI distributions as their infotainment solution. And if you ever dabbled in that corner of the universe, you know that updating that particular piece of software is not a trivial operation. All GENIVI certified distributions run systemd and certain software has already started to depend on it. I think this a troublesome development.

      Löschen
  2. Eh, companies build products out of things that are well supported (in the commercial sense, you have paid *developers* working on it so it's much more likely to stay up-to-date than say OpenRC, currently run by a single *developer*. I don't think that's a real issue, systemd surely *works* for the most part, and anything that supplants it in the future will be used instead. I mean, do they really have a better alternative? Not really in my opinion, there's nothing that gives you the entire feature set (Linux specific behaviour and features included) in the *deceivingly simple way* as you put it before. They need some sort of API as well to build things on top, it becomes a lot less work if some of it is already provided (and let's be honest, companies building things don't really care about shitty APIs, it's the engineers that build things on top/workaround issues). Anyway, what I also wanted to add to what I wrote last night (because it was getting late) is that I find there's only one developer that's really hard to deal with (and this is known by almost everybody, we have a lot of people in the kernel side of things that are not interested in initiating a conversation with a person on improving things when the best you can get out of it is that you're wrong, and that they're right with how things are done. So if your usecase is wrong, you're using it wrong in the first place, and all these years you've been doing it all wrong because what has suddently come to replace something expressible with declarative logic is better and your XYZd needs to play well with it). There was a lot of talk inside Red Hat (because it started by winning people inside ofcourse, and there are people that still don't like it currently) about it replacing Upstart (which is what EL6 went with) but we all know what it ended out to be. There was certainly propaganda, which almost everyone realised, even when things like the journal was introduced (the white paper or whatever was written in a tone that could easily set someone unexperienced with how things work into a false sense of reliability of metadata collection, which is still racy, not only for short lived processes, but things systemd generates itself -- it stores the invocation id as dangling links in a private directory under /run it could read from, but then the symlink could be cleaned up before the journal readlink's it and stamps the entry with the metadata, a problem systemd creates here, apart from non atomic anscillary metadata passed over sockets, and arguably +-delta t now since it does caching with recent changes).

    I agree with everything you said, except for that part the GENIVI building things on it. There are a lot of ugly things in the Android userspace (and even how updates are rolled out), no one pays attention to it (you're a consumer of the high level interface at best). That sucks more and still covers a lot more ground in terms of damage than GENIVI. That's just my opinion though, on the whole thing.

    AntwortenLöschen
  3. cont...

    That said, on the nicer side of things, since I try to stay optimistic (and it's free software), we still learnt nice things out of it, and I still say that anything that comes after it will hopefully reconsider some of the design choices made and improve on it (and as I said, certainly not all of it is broken, and that a major cause of issues is the development attitude itself). At this point, I don't bother communicating with developers, because in the past, that has often led to people from the other side (who don't prefer the author or anything from him) to mindlessly flame on things that were not deserving of so much noise, or in that whatever feedback you provide, you get nothing out of it from the developers themselves in some cases. The end result is always frustrating, so I've chosen the path of living with how things are (in that it's too late to try to use anything else apart from Linux for me, that might not make sense but it just feels to hard to jump ship, considering my mental investment in it).

    On a closing note, I always find your criticism fair (and I respect your opinion on how the community responded to the whole thing) on systemd and its developers, even if I don't share all of it. The only thing is, you're vocal, but certainly not in a minority. A lot of us feel the same way.

    AntwortenLöschen