This whole debate saddens me
This whole debate saddens me
Posted Dec 11, 2014 0:41 UTC (Thu) by dlang (guest, #313)In reply to: This whole debate saddens me by mchapman
Parent article: The "Devuan" Debian fork
but if the API of those functions is "internal" then it is monolithic in design (even if implemented in multiple binaries)
Posted Dec 11, 2014 0:49 UTC (Thu)
by pizza (subscriber, #46)
[Link]
The API *between* components is a published, stable DBUS (and/or command-line) interface.
The implementation details, ie the C functions, are internal, private. You know, not unlike Linux's published userspace API, vs the internal implementation details that are changing all the time?
Posted Dec 11, 2014 3:11 UTC (Thu)
by mchapman (subscriber, #66589)
[Link] (11 responses)
Oh criminy. Let's take this from the top again.
You asked why the different systemd components are in the one tree. I said that one likely reason is so that they can share code. nix wondered why they didn't just use a shared library for that. I said that it might be because the shared code isn't part of the *public* interface of systemd, so there is no compelling reason to make it a dynamically-linkable library.
Got it yet? We're talking about code that is statically linked into multiple, separate, independently-reimplementable binaries. This has *absolutely nothing* to do with their public APIs (i.e. a set of D-Bus interfaces) provided by those binaries.
Posted Dec 11, 2014 17:22 UTC (Thu)
by nix (subscriber, #2304)
[Link] (10 responses)
And no, I'm not going to go away and fork or reimplement systemd or shut up as peter-b so charmingly suggested. I don't have infinite time. I am, in fact, permitted to say 'this is bad design, other projects don't do this, it has been done this way before and every time turned out to be a bad idea' without simultaneously being obligated to fix every single instance of bad design I see. Nobody could ever have enough time to do that.
This is a classic systemd proponents' attack: if you criticise the holy project in any way you should shut up unless you have personally implemented something better. Sorry, it doesn't work that way, and repeatedly attempting to shut down any and all criticism this way does *not* make me feel better about the project as a whole.
Posted Dec 11, 2014 19:30 UTC (Thu)
by peter-b (guest, #66996)
[Link] (4 responses)
Show me a free software project that has such a ridiculous policy.
Posted Dec 13, 2014 2:49 UTC (Sat)
by flussence (guest, #85566)
[Link] (2 responses)
Posted Dec 13, 2014 3:30 UTC (Sat)
by rahulsundaram (subscriber, #21946)
[Link]
Posted Dec 13, 2014 12:39 UTC (Sat)
by cesarb (subscriber, #6266)
[Link]
> Does Wine count?
Wine's main internal, not-for-public-use interface is the server protocol, which is the RPC between the lower-level Wine DLLs and the shared wineserver process.
They don't maintain bug-compatible stability of that interface. Every time they feel the need, they add, remove, or change its methods and structures. The only concession to compatibility is a single version number, which is increased ever time they make a change, and used to detect version mismatches between the server and the DLL. That version number is already over 450, meaning there were over four hundred times that interface was changed in an incompatible manner.
So no, Wine doesn't count.
Posted Dec 14, 2014 17:21 UTC (Sun)
by nix (subscriber, #2304)
[Link]
There is a certain degree of conservatism that should come with writing software at the kernel/userspace boundary, or at the 'everyone has lots of dependencies on me' level. glibc has it. systemd (like libpng) doesn't.
Posted Dec 11, 2014 23:49 UTC (Thu)
by mchapman (subscriber, #66589)
[Link] (3 responses)
This the first time I've heard of "calling a function in a different compilation unit" shoddy design. If that's what you really think, then all software is shoddy.
Posted Dec 14, 2014 17:24 UTC (Sun)
by nix (subscriber, #2304)
[Link] (2 responses)
As far as can see, there are two possibilities here:
- Either those interfaces are external interfaces, and they should be a stable shared library API, and the systemd developers are doing shoddy work by not making them stable, or
- those interfaces are internal interfaces, subject to change as and when needed, and those things in the systemd source tree that use them are *part of systemd* and claims that oh no they just share a source tree and are not really part of it at all are, not to put too fine a point on it, lies.
I don't see a third option, and neither of these are particularly pleasant.
Posted Dec 14, 2014 20:15 UTC (Sun)
by anselm (subscriber, #2796)
[Link] (1 responses)
I don't know whether explaining this to you once more will make any difference or if you're
deliberately trying to be obtuse, but here goes:
systemd as a whole consists of a number of modules that communicate via documented external
interfaces. There is a stability promise that covers most of these interfaces. It is possible
to replace most of those modules by independent implementations that are otherwise unrelated to the systemd code base as long as one sticks to the documented interfaces.
In the interest of saving work, various modules avail themselves of common subroutines in a separate directory in the source tree. Since all of systemd is released together and nothing outside of systemd uses these subroutines, there is little point in making these into a shared library (especially since then invariably somebody outside the project would want to to use that, and that would impact the systemd developers' freedom to change things around as needed to suit the implementation), and systemd uses linker features to ensure that every systemd modules contains only the code it actually uses.
Therefore systemd's "library API" is an internal implementation detail similar to the internal APIs of the Linux kernel. It only exists to make the systemd developers' life easier. Whether systemd consists of separate modules (it does) is of no consequence to this, because it is still possible to reimplement many of these separate systemd modules independently based on the documented external interfaces and the API stability promise.
Posted Dec 14, 2014 21:05 UTC (Sun)
by deepfire (guest, #26138)
[Link]
Posted Dec 13, 2014 0:29 UTC (Sat)
by njs (subscriber, #40338)
[Link]
In the systemd case, there's exactly one copy of the source code, and it always gets updated in sync with its reverse-dependencies. You do end up with multiple copies of the *compiled* code, but I don't see how this can cause problems beyond a miniscule waste of space. It's not really any different from how macros or inline functions or C++ templates work. Plus it almost certainly increases reliability to avoid adding another .so dependency to your early boot stack, esp. once you take into the account the possibility of version skew etc.
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me
> >
> > Show me a free software project that has such a ridiculous policy.
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me
This whole debate saddens me