The D ecosystem in Debian with free-as-in-freedom DMD

Matthias Klumpp via Digitalmars-d digitalmars-d at puremagic.com
Tue Apr 11 05:25:09 PDT 2017


On Monday, 10 April 2017 at 23:08:17 UTC, David Nadlinger wrote:
> On Monday, 10 April 2017 at 17:27:28 UTC, Matthias Klumpp wrote:
>> That's why I have been writing a lot of Makefiles and Meson 
>> build definitions lately.
>
> It seems like doing so without having a closer look at the 
> realities of D software (no stable ABI, etc.) might not have 
> been the best use of your time. How would Dub be such 
> fundamentally unfixable that making the official language tools 
> play nice with distro packaging (and the other way round) 
> wouldn't be preferable over manually re-writing build systems 
> all over the place?

Dub is not unfixable, but there are many more issues with it 
which make it very very hard to use in a distribution context - I 
tried that and it didn't work well.
I am treating D in Debian like I would treat C++, which is quite 
fair given the similar featuresets and challenges.

>> But with an unstable ABI the standard library is also 
>> affected, which would trigger us to do Haskell-style 
>> versioning (which mangles dependencies to depend on a virtual 
>> package containing a hash of the GHC version), and that not 
>> only sucks but also requires quite a lot of manpower.
>
> So it sounds like there is a solution already for other 
> languages. Could you elaborate some more on the problems with 
> it? I suppose there is some wiki page documenting the process 
> somewhere?

Haskell and OCaml permanently rebuild the whole stack on every 
new compiler release, which is why they have permanent transition 
trackers[1], so they basically continuously rebuild. I want to 
avoid this at all cost for D, as this is very very maintenance 
intensive and painful, and will require much more people to work 
on it than D has available in Debian.

[1]: https://release.debian.org/transitions/

>> Rust only has one compiler which strongly optimizes, so we 
>> don't have the problem of choosing the right one. Cargo is/was 
>> an issue but it's being worked on and seems to work well now: 
>> https://wiki.debian.org/Teams/RustPackaging/Cargo
>
> Rust doesn't have a stable ABI either, and it doesn't look like 
> there is any movement in that direction (not that I think that 
> there should be). That the people driving the effort might not 
> be aware of it yet doesn't mean it isn't an issue for them.

It's being worked on[2], but it's not a super-high priority.
There doesn't seem to be a definitive answer on how Rust is 
handled in Debian yet (but to know for certain, I would need to 
ask the Rust team).

[2]: https://github.com/rust-lang/rfcs/issues/600

> IIRC OCaml is also very much a statically linked affair. And 
> how does Debian distribute Go binaries? Is there any issue with 
> those being linked statically? If not, let's just distribute D 
> libraries as source and compile/link them statically when 
> building binaries, and problem solved.

Surprisingly it looks like many Go packages are indeed provided 
as source-installations.
Doing something like this with D would require Makefiles and Dub 
to pick up sources from system locations properly which isn't 
really done yet...

> Some of the compiler developers, myself included, understand 
> the issues involving ABI stability and distro packaging quite 
> well (although the latter admittedly only on a general level). 
> In fact, one of my earliest open source memories is of some 
> work in the trenches ensuring ABI stability of some bits of KDE 
> across releases. Yet we are still going to tell you that the D 
> ABI is going to remain unstable for the foreseeable future. 
> This is not something that just requires a man-week or month to 
> "fix" in the compiler, but would impact many other areas as 
> well, for example language evolution.
>
> If you somehow got the impression that this is just due to D 
> developers "not getting it", just have a look at the other 
> recent compiled languages. Go and Rust don't fare any 
> differently, and even Swift, with all its development manpower, 
> doesn't have a stable ABI yet [1]. And I believe header-only 
> C++ template libraries have been mentioned already as well.
>
> I can only speak for myself, of course, but I certainly see the 
> strategic importance of integration into the Linux distribution 
> ecosystem for D, and I'm very happy to work with packagers 
> wherever possible. However, you also need to acknowledge the 
> properties of the ecosystem *you* are working with. If you see 
> a big stretch of difficult terrain in front of you, closing 
> your eyes won't make it go away; you'll only lose time you 
> could spend working around it. ABI instability is something 
> you'll have to work around one way or the other.

That's the whole point of this thread, I want to find the best 
solution to deal with this issue and also one the D community can 
live with.
I am not set on any particular solution yet, at the moment I see 
the problem and I am thinking about how to deal with it in the 
best possible way (ideally not doing what OCaml/Haskell are 
doing, although pulling a "soft Haskell" where we rebuild 
everything when the D ABI changes would be way easier).


More information about the Digitalmars-d mailing list