I am fed up with systemd. I am not fed up with GNU/Linux. I’m disappointed that Debian has gone down the systemd path and hope that course reverts at some point (and I expect it will eventually). In the meantime, I’ve finally got enough motivation to fiddle with Gentoo and OpenRC.
My main problem with systemd is that it breaks with a design philosophy that has been in place for decades and has far more benefits than drawbacks. I’m not a crotchety old unix admin. I’m a 25 year old kid that thinks “do one thing, do it well, and let APIs and protocols and standards be your common ground” is a superior solution when designing a system that needs to be extensible, customizable, and not beholden to the whims of a handful of large, entrenched players. Communities can coalesce around the best of many prolific standards as necessary and according to whatever parameters are appropriate for them; they can’t coalesce around multiple non-existent super-projects that want to be the kernel of userspace.
These are the things that I believe systemd does well:
These are all things that an init system should not be, no matter how well or poorly they fulfill the function:
And before I get lynched by the systemd-is-modular-you-dumb-dumb-just-leave-those-modules-out mob and get linked to the systemd myths webpage: the Linux kernel is also modular. That doesn’t mean it isn’t a monolithic piece of software. Tight coupling –which the systemd project seems to regard as a feature rather than a bug– is almost always bad. It means all of those lovely modules can’t operate independently. It’s all systemd or nothing. And while you may be able to leave those modules out today… what about tomorrow? A year from now? Three? I seriously doubt that journald will forever remain the only hard dependency of systemd as time goes on. That list is going to continue to grow.
My own personal opinion is that a number of important, but boring, Free Software projects had burnt out developers and maintainers who had no problem letting RedHat take the torch and run with it, even if that meant tossing the UNIX design philosophy and letting RedHat conveniently embrace, extend, and extinguish any remaining semblance of competition in the enterprise GNU/Linux sphere. There are some projects up there –the most glaring being ConsoleKit and of course sysvinit itself– that most people largely agreed just sucked and needed replacing. But in my view, the baby got thrown out with the bathwater. We just haven’t realized it yet.
One thing I’d like point out is that while systemd is coupling many of those sort of things together into one cohesive package (but not one program, natch), it’s not trying to be the primary thing for all of those. So you can rule out hostname, httpd, dbus, LUKS, date, and iptables from that list. (It won’t be the primary webserver, it just has one. It isn’t hosting the DBus daemon as part of it, it just uses it extensively, etc.)
The other aspect of some of the extraneous projects that systemd is introducing (datetimed, hostnamed, etc) are just APIs and an implementation for something that has badly needed one but nothing had arisen yet. Convention over configuration is a powerful default, one that Linux has sorely lacked.
And there is a lot of configuration the system needs to do during boot-up to get a basic functioning system, regardless of purpose. You want your hard drives mounted, in the correct locations. You want your network stack initialized, at least basically. You want your firewall rules applied. You want all of this done in the correct order, but parallelized when possible. Which means you’d need a defined interface to interrogate the state of each of those. And perhaps a defined interface for each of those to notify the init process. (An alternative architecture can be developed, I’m sure.)
All that being said, I think systemd would’ve been easier to swallow if hostnamed, datetimed, etc were introduced earlier and used before pushing systemd itself. However, I don’t think a lot of people would have used them individually if they were. It’d be like looking at trying to replace a cron implementation. A dedicated camp or two would use it, but the rest of the community would ignore it. (Pick any example, I’m certain I could find examples of alternatives coming but never reaching critical mind share. Even if they would’ve improved the status quo in some way.)
I see systemd as pushing many different changes that needed to happen at some point all at once. Risky, noisy, and quite painful. Ripping the bandages off all the hacks from the 80’s & 90’s at once.
It could’ve been done better.
I have switched my development machines from NixOS to FreeBSD.
I really enjoy FreeBSD and happy I switched. I do miss NixOS to some degree though. Having one central file to configure the entire system was nice. But in general I have grown less interested in Linux as a platform and feel FreeBSD aligns with my values more.
Could someone explain to me their gripes with systemd? I personally love it and can’t stand the old sysvinit-style system (with its shell scripts, run levels, and lack of dependency intelligence). So much so that I’ve had to turn my Debian stable machine into a “franken Debian” machine in order to use a recent version of it. I suspect most of the upset at it comes not from any genuine criticism of it, but a frustration with having to change (at all) how things are done.
I’m no expert on the matter but I’d agree that my personal experience with systemd on Arch has been great. It’s very easy to configure and use, and I’ve found it much easier to add new services quickly as my needs change. I too would love to better understand the frustrations people have with it.
People are worried it’s making Linux a monolithic “proprietary” system. Of course, systemd, udev, dbus, and all the related technologies are open source, but they are all being mushed up together into one project that really tightly couples with the kernel, and forces things to tightly couple with systemd in turn. They aren’t really supporting avenues for backwards compatibility and are making changes that lock down the community.
Traditionally, many Linux distros have had different init system implementations and different philosophies on the boot sequence. This means they can also select what kinds of software they want to use in the core system, how they want to build the heart of the distro. But soon, there will be one way to do a Linux core: systemd.
That’s a perfectly fine philosophy–that’s how the BSDs work–but in the mean time it’s fucking with the Linux community and killing diversity. Metaphorically, the systemd devs (mostly Red Hat) are building a massive highway right through multiple Linux towns without asking for permission. It’s open source, they don’t NEED permission, but they are rustling a lot of jimmies.
As a consequence, lots of people (myself included) are looking towards an operating system with a more mature community, that isn’t experiencing so much conflict. My servers now run FreeBSD, and I don’t have to worry about all the changes that are happening in the Linux community right now. Because frankly, I don’t care. I just want my stuff to work properly, without having to keep up with all these changes.
When I was younger I loved installing and reinstalling operating systems every few months, and I learned tons doing it. Now that I know all that stuff, it’s just work. So I’d rather use FreeBSD, which is just as good (and often better), and capable of keeping itself up to date without the core changing in bizarre, uncontrolled ways. FreeBSD is a pleasure to use, and I doubt I’ll go back to Linux unless I have a particular need for it.
So… what you’ve said here only seems to confirm my suspicions that:
most of the upset at it comes not from any genuine criticism of it, but a frustration with having to change (at all) how things are done.
Mostly, yes. There are some legitimate criticisms of what it actually does, but often regarding some specific way a feature works, not the project overall. And I don’t think people are frustrated at having to change at all (that is, having to change even a little bit), rather that a shocking amount of things need redoing.
Essentially I think your sentiment is spiritually correct, but your expression of that hand waves the opposition more than is appropriate.
a) I don’t trust its reliability. Particularly since it’s Pottering - I’m still dealing with breakages of things that worked fine before PulseAudio.
b) It encourages people to write systems that only work on Linux. Already we see this with e.g. Docker. It’s antithetical to the open-source spirit of choice and freedom and innovation through competition. If Unix had been written with systemd, we would never have had Linux in the first place.
I’ve been having a better time than I thought I would with CRUX Linux. It’s not as polished as other distros, but it doesn’t have anything that’s really obnoxious.
Compiling packages is less painful than I was expecting it to be, even on my netbook. There are some packages which I’ve had to ^C after 24 hours (unsurprisingly firefox/webkit/rust, for reference the Linux kernel takes 20-30mins), but it’s easy enough to find binaries for those.
The repositories are pretty bare too, but creating your own package is usually copy-pasting 10 lines of shell script and changing the name.
Or if you don’t really care about the kernel but you still want a GNU system, there’s Debian GNU/kFreeBSD.
Unfortunately, GNU/kFreeBSD was dropped from the release architectures for Jessie due to an ostensible lack of maintainership.
I tried it briefly a year or so ago and it did work quite well. I would not call it “interesting”, since for nearly all purposes it’s indistinguishable from Debian GNU/Linux, but that is really the point. =) It’s something I would certainly consider switching to now, and it’s something I think is extremely important to keep Linux honest, but unfortunately I don’t really have either the BSD or system programming skills to contribute meaningfully to it.
I would love it if enough people were to step up to get it released with Stretch, but unlike me, most BSD people are not hugely enamored of the distro model, so it’s awkwardly positioned.
what most people wanted was the opposite: a BSD userland on a Linux kernel
I tried booting into the freebsd installer on my UEFI laptop, and couldn’t get past a problem involving re-mounting the USB stick with the image on it. The error message had about 3 hits in google, and from what I could tell, was supposed to be restricted to specific USB sticks. However, I tried about 6 different models, each from a different manufacturer, and always hit the same problem. Legacy boot, non-Secure Boot UEFI, both had the problem, so I eventually just gave up. I expect that my laptop is just not well supported.
I expect that PC-BSD would have similar problems, being based on FreeBSD and all, but I haven’t tried it.
It is unfortunate, I really want to get off linux but I can’t afford a new laptop right now.
If you want to try pc-bsd, you could try hitting up the pc-bsd forums and seeing (or asking) if there is any info there. With freebsd make sure you were using one of the uefi images (should be named something like FreeBSD-10.1-RELEASE-amd64-uefi-memstick.img).
yes, I was using the uefi images.
My beefs with *nix aren’t going to be resolved one way or the other by systemd. It’s all just lipstick on a pig as far as I’m concerned; the security model – broken; the interactivity model – broken; the shell – beyond broken. I’d love to work on a post Linux single-person OS that’s not Windows, but really, what’s the point?