L4Re with GCC 9; Repositories and Roadmaps

Paul Boddie <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <3221217.jJnyOOg6iz@jeremy>
Hello and Happy New Year!

Having been otherwise occupied so far this year, I decided to take the 
opportunity to revisit my L4 development environment that happens to use 
Debian unstable. It turns out that GCC 9 is now the supported toolchain 
version, and unfortunately, L4Re doesn't yet understand this new version.

So, first of all, I wondered whether support for that is imminent. I did take 
a look at persuading the build system to work, but this seems to involve 
hunting down version-specific resources and defining new ones for the new 
version. I stopped when encountering some libstdc++ headers and wondering 
whether this isn't documented somewhere.

= Repositories =

It did occur to me that I might also be expecting updates for such things from 
the wrong channel. Since I have been using L4Re for a while, I still use the 
Subversion repositories made available from svn.l4re.org, referenced by the 
documentation on l4re.org. It seems that these repositories are not updated as 
frequently as the GitHub repositories, but maybe they serve as a kind of 
staging area for more stable releases.

After giving up on using GCC 9, I decided to re-clone repositories in a Debian 
stable environment. This didn't go very well with the Subversion repositories: 
after a while of saturating my aging machine's I/O bandwidth, cloning (or 
checking out) tended to fail. The repomgr script, if re-run, seems to just 
delete everything and start again, so after a few tries I gave up.

Meanwhile, using the GitHub repositories failed for different reasons. 
Previously, I have tended to get "index pack" and "missing object" errors with 
Git when cloning. There don't seem to be any decent remedies for this, with 
people suggesting tweaking compression, network, memory and other settings, 
manually fiddling with the "object database" and other such nonsense. The 
consensus might be that I do not have a powerful enough machine (only 1GB RAM) 
to clone even modestly-sized Git repositories.

Nevertheless, it would be nice to be able to download some kind of release 
distribution. I somehow doubt that the world really needs to accommodate all 
the multi-gigabyte Linux kernel clones out there that differ by a few files, 
either. If I really want to version my modifications against the released 
code, I can always version control them myself (even using a more coherent 
version control system if I want).

= Roadmaps =

Such considerations led me to also consider what I have been wanting to use 
L4Re for and the notion of a roadmap, both my own and that of L4Re itself. It 
seems to me that L4Re, or parts of it, can form the basis of a usable system 
in its own right (as opposed to just hosting L4Linux). However, I don't see 
much development directed towards such a goal. (Actually, I don't really see 
much L4Re development at all.)

It seems to me, as I may have mentioned before, that one crucial area of 
development that would be needed for my purposes is that of providing general-
purpose filesystem support. To do that, it seems that a few separate issues 
need attention, amongst them the component architecture required to export 
file entries and contents to programs, and support in the C library so that 
programs can access files transparently.

Since L4Re's filesystem support seems to require linking filesystem-specific 
libraries against programs and having those programs access filesystem data 
directly, as far as I can tell, a new component architecture is required. 
Meanwhile, it seems to me that uClibc, at least in the version offered by 
L4Re, does not offer a particularly coherent or convenient basis for 
integrating with such a component architecture.

Consequently, I spent a fair amount of time last year investigating filesystem 
component architectures and alternative C library implementations. But I 
wouldn't mind knowing whether there are plans to remedy these deficiencies in 
L4Re or whether I should just plug away at such things by myself.

(I can live with people saying that they don't care about the things that I 
happen to care about. No-one needs to make excuses here: even the Hurd people 
seem pretty unmotivated about getting people on board, although it can be said 
that within certain parameters, they at least have a system that meets their 
objectives to some degree.)

= Some Thoughts =

It rather looks like the amount of time I have to spend on L4Re-related 
development will be significantly reduced for the foreseeable future. In some 
respects, I feel that I have learned quite a bit, but in other respects, I 
feel that it has been a frustrating exercise to try and get up to speed with 
L4Re development. (And I hardly want to get started on my Fiasco development 
experience.)

Although literature obviously exists about various L4 implementations, I don't 
feel that the documentation experience is coherent at all. Many of the 
pertinent details are also obscured by the focus on code-originating reference 
documentation. And where microkernel-based systems should be emphasising the 
nature of the interfaces between components, there instead seems to be a 
policy of hiding such details in the implementation details of various 
abstractions (implemented multiple times in an almost archaelogical fashion).

Indeed, this latter policy is quite infuriating because it binds the developer 
to existing functionality and frameworks unnecessarily. So, when developing my 
components for low-end devices, I went along with L4Re framework classes due 
to an incomplete understanding of the IPC mechanisms (which also brought other 
irritations because those classes assume a more complete understanding), but 
also because interfacing with other components is not obvious when the 
protocols are squirreled away across multiple header and implementation files.

I have even gone as far as to write my own interface description language tool 
to permit the generation of IPC code and to help emphasise component 
interfaces and protocols. It seems to me that a lot of the point in having 
systems that facilitate component-oriented architectures is to make such 
details explicit, as was indeed emphasised by projects like Spring. Otherwise, 
everyone might as well be writing stuff for frameworks in the Linux kernel.

Anyway, I am sure that there are plenty of people developing for and enhancing 
L4Re who are content with their situation and what they are able to achieve. 
But I personally feel that opportunities are being missed to apply these 
technologies to areas where they would make a real (and, crucially, positive) 
difference.

If anyone else (still reading by this point) is even vaguely interested in 
general-purpose operating system development on L4Re, it would be nice to hear 
from you.

Paul
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.