Re: OT: Open letter to the Linux World

From: Rob Landley
Date: Fri Apr 10 2015 - 21:08:47 EST


On Fri, Apr 10, 2015 at 4:20 PM, Aaro Koskinen <aaro.koskinen@xxxxxx> wrote:
> Hi,
>
> On Wed, Apr 08, 2015 at 07:37:15PM -0500, Rob Landley wrote:
>> Heck, the FSF's entire "It's GNU Linux, Dammit! Call it by its proper
>> name: GNU/Linux/dammit" campaign is seriously irritating, and part of
>> what I was doing with busybox was trying to create a linux development
>> system without a single gnu package in it (busybox, uclibc, tinycc)
>> capable of rebuilding itself under itself, and then ask Stallman "I
>> know you're going to insist this isn't a Linux system but a
>> GNU/Linux/Dammit system, I'd just like you to try to explain _how_."
>> (Preferably capturing this on video.)
>
> What was the result of this work?

http://landley.net/aboriginal/about.html

My old self-hosting system was 7 packages: linux, busybox, uClibc,
gmake, gcc, binutils, and bash.

The new one I'd like to do is 4 packages: linux, toybox, musl, and
qcc. Right now, I'm focusing on getting toybox to 1.0 as fast as
possible, then I worry about other stuff.

> Did you manage to build a self-hosting system?

Yeah, but it's still using a gcc toolchain. (The last gplv2 release of
gcc, binutils, and make, circa 2006.)

I was going to replace it with http://landley.net/code/tinycc (and
then http://landley.net/code/qcc). The idea was to take my tcc fork
and make it a multiplexer like busybox (so it could run as cc, ld,
strip, as, and so on depending on what name you called it under; one
binary with lots of symlinks to it).

The qcc idea was to rip out tcc's code generator and replace it with
QEMU's tcg (tiny code generator), so you'd turn the compiler behind
http://bellard.org/tcc/tccboot.html (I.E. this already _built_ a
working kernel at one point, albeit with a lot of cheating that I was
working to fix) and make it support all the targets qemu does,
leveraging qemu's developer base to keep them well-supported. _AND_ I
got permission to BSD license his tcc code, and qemu's tcg is already
BSD licensed, so that fixes the license problem.

But I got distracted by toybox (the history is
https://lwn.net/Articles/478308/ then
https://www.youtube.com/watch?v=SGmtP5Lg_t0 then
https://lwn.net/Articles/629362/ and I'm currently dealing with
merging http://lists.landley.net/pipermail/toybox-landley.net/2015-April/004024.html
and yes that's the Android Core maintainer posting to the toybox
list).

So I've been kinda busy with other things of late. :)

These days I'm waiting for llvm to mature, but a month or two back
somebody picked up my qcc idea (combine tinycc's front end with tcg's
back end to get a simple bsd licensed C99 compiler that supports a lot
of targets) and actually started seriously working on it. So at this
point I'm looking to contribute to _his_ project. (I'd link to him but
I'm in japan at the moment and those files are back in texas. Ping me
after the 20th if you're still curious.)

> What implementation of "make" did you use to build the kernel?

I plan on writing my own, but it's a bit down on the todo list. For
qcc it was going to be one of the multiplexer commands like nm and
objdump. Maybe I should implement it in toybox instead, but it's not
in the 1.0 roadmap at http://landley.net/toybox/roadmap.html and I'm
not adding more stuff to that until _after_ the release. (Well not
that I have to implement, somebody wants to send me a command already
written I'll certainly look at it...)

I note that the hard part with getting the kernel to build with tinycc
was actually the more obscure binutils things. When I was trying to
get my tinycc fork to build the kernel (without using any parts of gcc
or binutils) one of the first things that failed was generating a
header file that did either nm or objdump -d on a binary (I forget
which) and ran the result through sed to generate a header file with
structure offsets. Tinycc had an assembler but not a disassembler, you
see...

These days I'm waiting for http://ellcc.org and similar to bear fruit.
For the linker they're either using http://lld.llvm.org but the
musl-cross toolchain is using
https://github.com/sabotage-linux/libelf-compat and before they were
using https://fedorahosted.org/releases/e/l/elfutils/ and I still
haven't had a chance to look at the LLVM toolchain AOSP is building.
It's all up in the air right now as everybody works to clean up after
the "career limiting move" that was GPLv3.

The android guys are using their own weird make setup (the Android.mk
files), and they tell me they have a brand new build tool to replace
make that they're they're porting the AOSP build to, which I should go
take a look at and maybe come up to speed on. But really, I wrote my
own "sed" and made Linux From Scratch build with it, and then did it
AGAIN from scratch under a different license. I'm partway through
writing my own shell for toybox and am supporting bash syntax in it.
Writing my own make that handles gmake stuff packages actually use
isn't that much harder if it comes to it.

(But as with init systems, it's a ways down on my todo list at the
moment. Get toybox to 1.0 so we have a public domain posix+LSB command
line that can build Linux From Scratch, _then_ see where toolchains
and such are. I know musl-libc.org is in good shape, llvm is
progressing without me, if I need to write a make I can do that...)

Rob
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/