comparison www/about.html @ 1781:b27851ab2795 draft

Vo Minh Thu was surprised by toybox replacing busybox and requested I update about.html.
author Rob Landley <rob@landley.net>
date Tue, 04 Aug 2015 14:40:20 -0500
parents 5a57035b1946
children 1ba206595781
comparison
equal deleted inserted replaced
1780:af5da3b293cb 1781:b27851ab2795
34 <p>The build is modular; each section can be bypassed or replaced if desired. 34 <p>The build is modular; each section can be bypassed or replaced if desired.
35 The build offers a number of <a href=/hg/aboriginal/file/tip/config>configuration 35 The build offers a number of <a href=/hg/aboriginal/file/tip/config>configuration
36 options</a>, but if you don't want to run the build yourself you can download 36 options</a>, but if you don't want to run the build yourself you can download
37 <a href=downloads/binaries>binary system images</a> to play with, built for 37 <a href=downloads/binaries>binary system images</a> to play with, built for
38 each target with the default options.</p> 38 each target with the default options.</p>
39
40 <p>(Note: the goal of the 2.0 release is to <a href=#migrate>migrate</a>
41 from busybox, uClibc, and gcc/binutils to toybox, musl-libc, and
42 lvm/lld.)</p>
39 43
40 <h2>Using system images.</h2> 44 <h2>Using system images.</h2>
41 45
42 <p>Each system image tarball contains a wrapper script <b>./run-emulator.sh</b> 46 <p>Each system image tarball contains a wrapper script <b>./run-emulator.sh</b>
43 which boots it to shell prompt. (This requires the emulator QEMU to be 47 which boots it to shell prompt. (This requires the emulator QEMU to be
115 using the Mercurial source control system. This includes RSS feeds for 119 using the Mercurial source control system. This includes RSS feeds for
116 <a href=/hg/aboriginal/rss-log>each checkin</a> 120 <a href=/hg/aboriginal/rss-log>each checkin</a>
117 and for <a href=/hg/aboriginal/rss-tags>new releases</a>.</p> 121 and for <a href=/hg/aboriginal/rss-tags>new releases</a>.</p>
118 122
119 <p>Questions about Aboriginal Linux should be addressed to the project's 123 <p>Questions about Aboriginal Linux should be addressed to the project's
120 maintainer (rob at landley dot net), who has a 124 mailing list, or to the maintainer (rob at landley dot net) who has a
121 <a href=/notes.html>blog</a> that often includes 125 <a href=/notes.html>blog</a> that often includes
122 notes about ongoing Aboriginal Linux development.</p> 126 notes about ongoing Aboriginal Linux development.</p>
123 127
124 <b><h1>Design goals</h1></b> 128 <b><h1>Design goals</h1></b>
125 129
286 290
287 <p>Now that the 1.0 release is out, what are the project's new goals?</p> 291 <p>Now that the 1.0 release is out, what are the project's new goals?</p>
288 292
289 <table border=1><tr><td bgcolor="#c0c0ff"> 293 <table border=1><tr><td bgcolor="#c0c0ff">
290 <ul style="margin-bottom:0px;"> 294 <ul style="margin-bottom:0px;">
291 <li>Untangle hairball build systems into distinct layers.</li> 295 <li><a href="#migrate">Move from busybox, uclibc, and gcc/binutils to toybox, musl, and llvm.</a></li>
292 <li>Make Android self-hosting</li> 296 <li><a href="#hairball">Untangle distro build build system hairballs into distinct layers.</a></li>
297 <li><a href="#selfhost">Make Android self-hosting</a></li>
293 </ul> 298 </ul>
294 </td></tr></table> 299 </td></tr></table>
295 300
301 <a name=migrate>
302 <h2><b>Move from busybox, uclibc, and gcc/binutils to toybox, musl,
303 and llvm (then qcc).</b></h2>
304
305 <p>Now that we've got a simple development environment working, we can make
306 it simpler by moving to better packages. Most of this project's new
307 development effort is going into the upstream versions of those packages
308 until they're ready for use here. In the meantime we're maintaining what
309 works, but only really upgrading the kernel version and slowly switching
310 from busybox to toybox one command at a time.)</p>
311
312 <p><b>uClibc:</b> The uClibc project's <a href=http://lists.uclibc.org/pipermail/uclibc/2007-September/039215.html>chronic development problems</a> resulted in multiple
313 year-long gaps between releases, and after the may 2012 release more
314 than three years went by without a release during which time
315 <a href=http://musl-libc.org>musl-libc</a> went
316 from "git init" to a 1.0 release. At this point it doesn't matter
317 if uClibc did get another release out, <a href=http://lists.uclibc.org/pipermail/uclibc/2015-May/048989.html>it's over</a>, musl is the more interesting
318 project. (Its limitations are lack of target support, but it's easy to
319 port musl to new targets and very hard to clean up the mess uClibc has
320 become.)</p>
321
322 <p><b>toybox:</b> The maintainer of Aboriginal Linux <a href=history.html>used to maintain</a>
323 busybox, but <a href=http://lwn.net/Articles/202106/>left that project</a>
324 and went on to create <a href=http://landley.net/toybox>toybox</a> for
325 reasons explained at length elsewhere
326 (<a href=https://www.youtube.com/watch?v=SGmtP5Lg_t0>video</a>, <a href=http://landley.net/talks/celf-2013.txt>outline</a>,
327 <a href=https://lwn.net/Articles/629362/>merged into Android</a>).</p>
328
329 <p>The toybox 1.0 release should include a shell capable of replacing
330 bash, and may include a make implementation (or in qcc, below). This
331 would eliminate two more packages currently used by Aboriginal Linux.</p>
332
333 <p><b>llvm:</b> When gcc and binutils went GPLv3, Aboriginal Linux froze
334 on the last GPLv2 releases, essentially maintaining its own fork of
335 those projects. Several other projects <a href=http://lastgplv2.org>did
336 the same</a> but most of those have since
337 <a href=http://llvm.linuxfoundation.org>switched to llvm</a>.</p>
338
339 <p>Unfortunately, configuring and building llvm is
340 <a href=http://ellcc.org/blog/?p=13246>unnecessarily hard</a> (among
341 other things because it's not just implemented in C++ but the 2013
342 C++ spec, so you need gcc 4.7 or newer to bootstrap it), and nobody seems
343 to have worked out how to canadian cross native compilers out of it yet.
344 But other alternatives like <a href=http://pcc.ludd.ltu.se/>pcc</a>
345 or <a href=http://tinycc.org>tinycc</a> are both less capable and less
346 actively developed; since the FSF fell on its sword with GPLv3,
347 the new emerging standard is LLVM.</p>
348
349 <p><b>qcc:</b> In the long run, we'd like to put together a new compiler,
350 <a href=http://landley.net/qcc>qcc</a>,
351 but won't have development effort to spare for it before toybox's 1.0
352 release. Its goal is to combine tinycc and QEMU's Tiny Code Generator into
353 a single multicall binary toolchain (cc, ld, as, strip and so on in a single
354 executable replacing both the gcc and binutils packages) that supports all
355 the output formats QEMU can emulate. (As a single-pass compiler with
356 no intermediate format it wouldn't optimize well, but could bootstrap
357 a native compiler that would.)</p>
358
359 <p>Additional goals for qcc would be to absorb ccwrap.c, grow built-in
360 distcc equivalent functionality, and an updated rewrite of cfront to
361 compile C++ code (and thus natively bootstrap LLVM).
362
363 <p>Finishing the full development slate would bring the total number of
364 Aboriginal Linux packages down to four: linux, toybox, musl, and qcc.</p>
365
366 <p>(Yes, reducing dependency on GPL software and avoiding GPLv3 entirely
367 is a common theme of the above package switches, there's a reason for
368 that: <a href=https://archive.org/download/OhioLinuxfest2013/24-Rob_Landley-The_Rise_and_Fall_of_Copyleft.mp3>audio</a>,
369 <a href=http://landley.net/talks/ohio-2013.txt>outline</a>, see also
370 <a href=#selfhost>Android self-hosting</a> below.)</p>
371
296 <a name=hairball> 372 <a name=hairball>
297 373 <h2><b>Untangle distro build system hairballs into distinct layers.</b></h2>
298 <h2><b>Untangle hairball build systems into distinct layers.</b></h2>
299 374
300 <p>The goal here is to separate what packages you can build from where and how 375 <p>The goal here is to separate what packages you can build from where and how
301 you can build them.</p> 376 you can build them.</p>
302 377
303 <p>For years, Red Hat only built under Red Hat, Debian only built under Debian, 378 <p>For years, Red Hat only built under Red Hat, Debian only built under Debian,
420 is also a minimal stub providing little functionality. Part of this is 495 is also a minimal stub providing little functionality. Part of this is
421 intentional: Google is shipping a billion broadband-connected unix machines, 496 intentional: Google is shipping a billion broadband-connected unix machines,
422 none of which are administered by a competent sysadmin. So for security 497 none of which are administered by a competent sysadmin. So for security
423 reasons, Android is locked down with minimal functionality outside the Java 498 reasons, Android is locked down with minimal functionality outside the Java
424 VM sandbox, providing less of an attack surface for viruses and trojans. 499 VM sandbox, providing less of an attack surface for viruses and trojans.
425 In theory the <a href=http://lxc.sf.net>Linux Containers</a> infrastructure 500 In theory the <a href=http://linuxcontainers.org>Linux Containers</a>
426 may eventually provide a solution for sandboxing applications, but the 501 infrastructure may eventually provide a solution for sandboxing applications,
427 base OS needs to be pretty bulletproof if a billion people are going to 502 but the base OS needs to be pretty bulletproof if a billion people are going
428 run code they don't deeply understand connected to broadband internet 24/7.</p> 503 to run code they don't deeply understand connected to broadband internet
504 24/7.</p>
429 505
430 <p>Thus replacement packages for the C library and posix command line 506 <p>Thus replacement packages for the C library and posix command line
431 should be clean simple code easy to audit for security concerns. But it 507 should be clean simple code easy to audit for security concerns. But it
432 must also provide functionality that bionic and toolbox do not 508 must also provide functionality that bionic and toolbox do not
433 attempt, and do not provide a good base for. The musl libc and toybox 509 attempt, and do not provide a good base for. The musl libc and toybox