News for hackers. Stuff that matters.
Re:Linux distros without systemd by grumdan on Monday May 20, 2019 @12:46PM (#19962281)
> They have a track record of labeling serious bugs as non-issues, ignoring them, or just not filing them as CVEs. Serious issues keep coming up.

Additionally, this is not likely to stop, since they took an init system that was (mostly) written in a memory-safe language (bash) and rewrote it in a memory-unsafe language (C++), thus enabling a whole class of systemic security issues that will keep popping up in the future over and over again as well. This is one of the design decisions behind systemd that irks me the most.

Re:Linux distros without systemd by AsyncAwait on Monday May 20, 2019 @03:18PM (#19963971)
> they took an init system that was (mostly) written in a memory-safe language (bash) and rewrote it in a memory-unsafe language (C++)

While Bash is memory safe, it is also very error prone to write and the potential of shooting yourself in the foot with it is rather big, especially with bigger scripts and considering these are executed mostly with root privileges, bash is not an ideal choice either.

I'd prefer if systemd was a Rust project for sure, but they went with C, presumably to remain consistent with the kernel, GNOME and most lower-level Linux system software, (also, Rust was pre-1.0 at the time).

Re:Linux distros without systemd by pmezard on Monday May 20, 2019 @01:03PM (#19962471)
Memory safety is not the alpha and omega of programming languages. People do not write million lines of code applications in bash, for a reason, trade-offs are to be made.

That said I agree they should have picked Go instead /s.

Re:Linux distros without systemd by grumdan on Monday May 20, 2019 @02:34PM (#19963551)
Sure, there are other concerns and bash is not an ideal language, but memory safety is responsible for quite a large number of security flaws, since its lack turns bugs into code execution vulnerabilities on a regular basis.

I don't really have an opinion on what language should have been picked instead, though OCaml may be a good candidate.

Re:Linux distros without systemd by dscpls on Monday May 20, 2019 @05:40PM (#19965531)
To be fair, erlang would have been the better choice here. Memory safety, concurrency and solid error handling all in one.
Re:Linux distros without systemd by yellowapple on Monday May 20, 2019 @09:06PM (#19966803)
I think I know what my next Erlang project's gonna be. Erlang-as-PID-1, here we come!

EDIT: or maybe as PID 2, per https://github.com/omisego/ewallet/issues/108 , though I'd be interested in the idea of writing an OTP application that can reap zombies and forward signals.

Re:Linux distros without systemd by AaronFriel on Monday May 20, 2019 @03:00PM (#19963804)
> People do not write million lines of code applications in bash, for a reason, trade-offs are to be made.

Isn't that basically what SysVinit and a good-sized chunk of the management tooling in Linux is?

To their credit, Bash is a _weird_ language, but it's not going to corrupt memory when it crashes, and its failure modes are pretty well understood by the distro maintainers writing those scripts.

Re:Linux distros without systemd by boomlinde on Monday May 20, 2019 @05:13PM (#19965261)
Those are all not million lines of code applications, but that only speaks in favor of a more traditional Unix userspace design. With modularity on the process level you don't need a million lines of code to herd services. Why an init system should a million lines of code is a mystery to me.
Re:Linux distros without systemd by sanderjd on Monday May 20, 2019 @01:11PM (#19962568)
I'm not such a lover of Go, but: non-sarcastically, Go may well have been a good choice.
Re:Linux distros without systemd by amalcon on Monday May 20, 2019 @01:36PM (#19962845)
> Lennart Poettering and Kay Sievers started the project to develop systemd in 2010.

https://en.wikipedia.org/wiki/Systemd#History

> Go was publicly announced in November 2009,[29] and version 1.0 was released in March 2012.

https://en.wikipedia.org/wiki/Go_(programming_language)#Hist...

The brand-new language that Google just announced last year was probably not considered a serious option here.

Re:Linux distros without systemd by loeg on Monday May 20, 2019 @01:48PM (#19962998)
It's 2019 and Go still has a much weaker toolchain and infrastructure story than C (which has a 30 year head start).
Re:Linux distros without systemd by sanderjd on Monday May 20, 2019 @02:28PM (#19963491)
Ha yeah, I didn't mean "they really should have used Go", I just meant, "Go as it exists today may be a good thing to use for this".
Re:Linux distros without systemd by masklinn on Monday May 20, 2019 @02:04PM (#19963209)
Given the timeframe, something like OCaml would likely have been a better option.
Re:Linux distros without systemd by szemet on Monday May 20, 2019 @02:36PM (#19963573)
Ocaml parallelism/concurrency story was not that good - but Haskell has just got its fancy new epoll based I/O manager (100000+ lightweight threads) around that time, with the 7.0.1 release (16 November 2010)

They could have even take inspiration, imagine: typed, functional, monadic init files - "systemd: avoid success at all costs" :)

Re:Linux distros without systemd by astrobe_ on Monday May 20, 2019 @03:05PM (#19963850)
The topic is memory safety, not concurrency support, FWIW.

Lua would have been a good candidate: memory safe, coroutine to structure the code in a concurrent-ish way if needed, and you have a configuration file parser for free (just use Lua as the configuration language, it was its very first purpose after all).

Re:Linux distros without systemd by m4rtink on Monday May 20, 2019 @06:06PM (#19965779)
That's nice in theory, but where are all the people who know Ocaml to write it and contribute to it ? I might be clueless but I can't really name any significant projects written in it, which might imply something about the number of people using it and being able to work on and contribute to something as large and important as systemd.
Re:Linux distros without systemd by ernst_klim on Wednesday May 22, 2019 @04:14PM (#19984995)
>I might be clueless but I can't really name any significant projects written in it

From system programming solely: libguestfs, Xen API, liquidsoap, Unison, MirageOS, google drive on fuse, 0install.

Re:Linux distros without systemd by ernst_klim on Monday May 20, 2019 @05:34PM (#19965474)
>Ocaml parallelism/concurrency story was not that good

OCaml concurrency is great, and Lwt [1] would be exactly what systemd need: run daemon and poll the answer concurrently.

Ada, C++ and D would have been another great choices.

[1] https://github.com/ocsigen/lwt

Re:Linux distros without systemd by masklinn on Monday May 20, 2019 @03:21PM (#19964011)
> Ocaml parallelism/concurrency story was not that good

I wouldn't expect CPU-bound multithreading to be much of a concern in an init/rc system. And resource thriftiness and predictability would likely be a bigger concern.

Re:Linux distros without systemd by the_why_of_y on Monday May 20, 2019 @04:52PM (#19965070)
While that would be amusing for sure, systemd's pid 1 is actually single threaded.
Re:Linux distros without systemd by tracker1 on Monday May 20, 2019 @01:16PM (#19962636)
Rust would have been more appropriate. Something like SystemD at such a low level in terms of hardware and service management should not be done in a language with a garbage collector imho.
Re:Linux distros without systemd by amalcon on Monday May 20, 2019 @01:33PM (#19962808)
> Lennart Poettering and Kay Sievers started the project to develop systemd in 2010.

https://en.wikipedia.org/wiki/Systemd#History

> Mozilla began sponsoring the project in 2009[16] and a nnounced it in 2010.

> The first numbered pre-alpha release of the Rust compiler occurred in January 2012.

https://en.wikipedia.org/wiki/Rust_(programming_language)#Hi...

Look, I like Rust and all, but are we really suggesting it for projects that predate public release of rustc?

Re:Linux distros without systemd by tracker1 on Monday May 20, 2019 @02:22PM (#19963423)
I understand that... Go still isn't an appropriate language for SystemD, also, when did SystemD really take hold? Lots of projects will shift underlying options with time.
Re:Linux distros without systemd by boomlinde on Monday May 20, 2019 @05:14PM (#19965282)
I understand "would have" in this thread as a hypothetical situation where the option had been available.
Re:Linux distros without systemd by jamesgeck0 on Monday May 20, 2019 @01:32PM (#19962803)
systemd predates Rust by a bit over a year.
Re:Linux distros without systemd by tracker1 on Monday May 20, 2019 @02:23PM (#19963427)
The point stands, Go isn't a good option for this type of process.
Re:Linux distros without systemd by jerf on Monday May 20, 2019 @04:43PM (#19964974)
The only thing that I can think of for that 2019 Go that would be a problem for this use case is binary size. None of the rest of the usual complaints would be stoppers or even that big a deal, and most of them, I'd pay to have a memory-safe language being used at that level. Init systems are a type of code that we don't have a good word for, but that I tend to end up in a lot, the code that isn't CPU intensive, or disk intensive, or RAM intensive, etc., but is all just logic and correctness rather than any of that. So "but Go is GC'ed!" isn't particularly relevant, for instance, because an init system pretty much ought to settle into a steady state and not be executing at all, on average, so who cares about a handful of microsecond GC pauses that may or may not occur at startup time?

Rust might be better now; my primary concern would be community size and whether I was limiting my contributor base, which Go also has as a concern. In both cases though I'd take it over C/C++ being used on such a critical project at this juncture.

In 2010, though... yeah, choices are a lot worse.

Re:Linux distros without systemd by tracker1 on Monday May 20, 2019 @07:25PM (#19966289)
I understand there's a much more limited subset of developers for Rust or even Go vs. C/C++. Also, I recall hearing about Rust before systemd, but am not sure. Today, it would probably be my first choice. Not that go is a bad choice, I just don't think it's a good spot for it. I also agree that either are probably quite a bit better than C/C++ options.

I'm not against go, other than gc and some size considerations. Given that a lot of k8s infrastructure for the likes of CoreOS and similar are written in it, it's definitely not a bad option. I think that today, and more so in late summer as async/await syntax settles, that Rust should be a first consideration for any low-level system code.

Re:Linux distros without systemd by fgonzag on Tuesday May 21, 2019 @04:29PM (#19974595)
It doesn't execute low level code in terms of hardware. It's a init system, all it (should do) is create a dependency graph and initialize the services in the correct order.

Many init systems have been created in bash, and I'd hardly call that a low level language.

Re:Linux distros without systemd by yellowapple on Monday May 20, 2019 @09:06PM (#19966798)
> People do not write million lines of code applications in bash, for a reason

And that reason is that one rarely needs to write a million lines of Bash: http://catb.org/esr/writings/unix-koans/ten-thousand.html

Re:Linux distros without systemd by Intermernet on Tuesday May 21, 2019 @09:45AM (#19970057)
If they'd picked Perl, they could have written an init system in one line... (hopefully, obviously /s)
Re:Linux distros without systemd by yellowapple on Tuesday May 21, 2019 @05:15PM (#19975132)
> (hopefully, obviously /s)

You underestimate my masochism and/or overestimate my sense of restraint ;)

Re:Linux distros without systemd by dullgiulio on Monday May 20, 2019 @01:12PM (#19962581)
Bash is memory safe until you run 'rm -rf $DIR/' when DIR is unset.

Let's just say the language choice went from bad to equally bad.

Re:Linux distros without systemd by effie on Monday May 20, 2019 @01:35PM (#19962828)
If you run or write that command into script without checking what DIR variable contains, the problem is in your lack of experience with shell, not the language choice. Also nowadays, rm itself has --preserve-root as default, so this won't delete your root fs.
Re:Linux distros without systemd by int_19h on Monday May 20, 2019 @06:32PM (#19965966)
By the same logic, if an app written in C has a security issue due to a null pointer or buffer overflow, the problem is clearly the coder's lack of experience with C.
Re:Linux distros without systemd by effie on Friday May 24, 2019 @08:43AM (#20000853)
Actually yes, because it is possible to write correct C, and because they could have chosen other language less conducive to those pitfalls. But your analogy doesn't hold, because in case of shell, the situation is different: the pitfalls are easy to avoid, and for unix admin tasks, there is no compelling alternative to shell.
Re:Linux distros without systemd by eropple on Monday May 20, 2019 @04:43PM (#19964986)
This is true if you are running the GNU userland. It's not necessarily true with other userlands that are often run on top of Linux. In a discussion touching on systemd, it strikes me as a little surprising that somebody would rely on a quirk of another replaceable component. ;)
Re:Linux distros without systemd by dijit on Monday May 20, 2019 @05:38PM (#19965523)
I’m sure the irony is not lost on you regarding the fact that systemd can not possibly run on an alternative platform, thus the situation you just ascribed is not “better” with systemd.
Re:Linux distros without systemd by eropple on Monday May 20, 2019 @05:43PM (#19965568)
Sure. That wasn't in favor of systemd, though? I comfortably write code against the GNU userland and I use systemd where it crops up. Just not a big deal to me; if somebody wanted to use my stuff elsewhere I'd just say "pull requests welcome!". I found the inconsistency striking, that's all.
Re:Linux distros without systemd by effie on Friday May 24, 2019 @08:46AM (#20000880)
Checking for content of a variable before passing it to rm is a basic instinct that should be done in all shell scripts. The comment about --preserve-root is just a reminder that the problem of deleting / is very rare.
Re:Linux distros without systemd by ink_13 on Monday May 20, 2019 @01:43PM (#19962935)
That's not a memory-safe error.
Re:Linux distros without systemd by blibble on Monday May 20, 2019 @01:44PM (#19962949)
do beginner bash guides not tell you to "set -u"? all the system scripts on my system have it

it causes the script to terminate with an error if it encounters use of an unset variable

Re:Linux distros without systemd by tetha on Monday May 20, 2019 @01:58PM (#19963123)
Not just -u - always <set -euo pipefail> unless you have a good reason. Fail on non-zero exit code outside of some special cases, undefined variables, and non-zero exit codes in a pipeline. And always use shellcheck, shellcheck is too good not to use tbh.
Re:Linux distros without systemd by trickstra on Monday May 20, 2019 @10:53PM (#19967252)
Are you saying something in C++ is preventing you from issuing that 'rm -rf' command?
Re:Linux distros without systemd by kbumsik on Tuesday May 21, 2019 @05:59AM (#19968799)
He is saying that Bash can also cause catastrophic behaviors by an as simple mistake as unsetting $DIR. C++ at least reject to compile when a variable is not set.
Re:Linux distros without systemd by trickstra on Tuesday May 21, 2019 @06:09AM (#19968829)
Any language can cause a catastrophic scenario like that. It's not a feature of the language. Not even the goal of the language to protect from something like rm -rf. The variable could have been set to empty string and C++ would just comply with what the programmer wrote (not what they meant, but that's a completely different thing).