Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 30 Nov 2012 18:04:54 -0600
From: Rob Landley <rob@...dley.net>
To: musl@...ts.openwall.com
Subject: Re: Summary of 1.0 marketing plan/scheme/nefarious plot from
 IRC.

On 11/29/2012 07:27:01 PM, Rich Felker wrote:
> On Thu, Nov 29, 2012 at 02:50:03PM -0600, Rob Landley wrote:
> > Notes from the discussion we had on IRC, plus some further random
> > thoughts on telling the world about musl:
> >
> > - wait until 1.0 so it's most likely to works for them.
> >   - People who take a look and wander off again are less likely to
> > take another look,
> >     so try to make a spash when you're _ready_, not before.
> 
> Agreed. I never really wrote down this principle before, but it's been
> in my mind for a long time. The main publicizing I've been doing so
> far has been in niche places (like mips and microblaze lists) and
> making sure musl is well-indexed in databases like freecode (formerly
> freshmeat) and ohloh. I suspect there are a lot more of the latter we
> should also hit.

Having a good 'elevator pitch' is nice too.

   Musl is a brand new C library that bridges the gap between Linux and  
Android.
   It's BSD licensed and Posix-2008 compliant, written from scratch to  
be small
   simple and clean with no legacy baggage and good thread support. The  
reason
   you've never heard of it is the first git commit was February 2011.

> >     - chroot for each target with native development tools
> >       - system images for qemu maybe?
> 
> It would be really cool if we had "system root trees" rather than
> "system images", with virtual 9p for booting qemu. By the way, getting
> qemu working on musl should probably be in our compatibility goals for
> 1.0.

It's slightly more complicated than that, or I'd already have done it.  
:)

Making client side initramfs work is easy, but it needs a server. Last  
time I looked into this (circa  
http://landley.net/notes-2011.html#29-04-2011), it would require diod  
on the host acting as a server to work on most targets. While this  
isn't much different than qemu's cifs export mode launching samba,  
people are much less likely to have diod already installed on the host.

QEMU does have a built-in 9p server, virtfs requiring a virtio  
transport. Unfortunately, between qemu-system-blah and the kernel  
virtio transport isn't supported equally on all targets. Specifically,  
I couldn't get virtio to work on arm, which is kinda important.

I still have the "i686-virtio" and powerpc-virto targets Alessio Bogani  
contributed last year, and they mostly work (just fixed minor bit rot  
with qemu getting renamed to qemu-system-i386). That's actually using  
virtio block device and virtio network, not virtfs, but the principle's  
the same. (Think of virtio as a bus and then other things get  
implemented on top of that bus; even though the bus is simpler than PCI  
support for it may not exist in the target we want because nobody's  
bothered yet.)

I also looked at getting virtio console working, but at the time the UI  
for it was appalling:

   http://lists.gnu.org/archive/html/qemu-devel/2011-05/msg00390.html

> >       - launch x11 vnc server and display in tightvnc window?
> >     - jslinux live image on website
> 
> Love this idea. I'd like it even better if we could adapt jslinux to
> start with a preinitialized memory/machine-state image rather than
> having to spend 15-20 seconds booting. BTW I think we need to look
> into whether there are license issues with using jslinux...?

The actual javascript source says redistribution requires permission of  
the author, so yeah. Somebody has to ping fabrice. (Or else reference  
the files off his web page, which is hugely impolite.)

I wonder what the busybox guys did? Let's see, google for "jslinux  
busybox" and bubble up through the archive a bit to find the commit  
that added it to the website is here:

http://git.uclibc.org/busybox-website/commit?id=317871f1a85816e3c0f405f00b2f081978fa9caa

And the jslinux in that still says you need Fabrice's permission to  
redistribute, commit comment is just that Denys added it and no further  
details. Date is March 4 of this year so check the mailing list archive  
on the website...

And this is the start of the thread about it:

   http://lists.busybox.net/pipermail/busybox/2012-March/077498.html

Content of message, and I quote, "Hey guys, Check this out!". One  
reply, "I saw it. Very cool." No mention of license or permission.  
(These are the people who took over the project that's the poster child  
for GPL enforcement. Wheee...)

Yes, by all means, let's ask Fabrice. (As musl maintainer, you should  
probably do it.)

> By the way, somebody also mentioned a mips emulator in js we could use
> instead or in addition to jslinux, but I don't know if it emulates
> enough hardware to get linux up.

Yay!

> > - distro conversions
> >   - leverage existing repositories, don't fall into the buildroot  
> trap
> 
> I think I've already avoided this trap without avoiding new distros,
> by building a community of people who like rolling their own distros
> but not getting involved in the distro/build stuff at all myself. This
> has been great for getting musl a lot of testing with lower entry
> barrier than large existing distros, but adding the latter now would
> be a good next step.

You've done great. My point here is just "how can we leverage the work  
other people have done without distracting ourselves more than  
necessary".

If we can come up with a musl chroot that debootstrap runs in (the  
"compile packages" not just "install binaries from repo" variant), or a  
musl chroot that emerge can build the world in, or koji:

    
http://opensource.com/life/11/7/free-sake-story-koji?sc_cid=70160000000IDmjAAG

Or whatever SuSE's variant is (blanking on the name), or buildroot, or  
arch's pacman, or...

(I'd mentino Yocto's poky but after meego and tizen and such it's  
really hard to _care_ about any of the Linux foundation's "look,  
another not-android!" gyrations.)

I wandered aimlessly through this bit more than once over the years and  
it's why I have the "bootstrap" stuff in my control-images. What I was  
trying to do was extend the basic "simplest self-hosting build  
environment" up to whatever the various distros needed and then let  
them build themselves. It's a finite amount of work. But it's an  
_undocumented_ finite amount of work and all these build systems have  
DEEP assumptions that they are building under themselves. (Yes, even  
gentoo. It's actually worse than Debian about it.)

Basically, I started researching gentoo bootstrapping in 2008:

   http://landley.net/notes-2008.html#17-12-2008

My friend Mirell took a serious stab at getting it working in 2009:

    
http://web.archive.org/web/20090411155149/http://impactlinux.com/hg/gfs

I took my own stab at it in 2010:

  http://landley.net/notes-2010.html#15-09-2010

And then tried a Funtoo version in 2011:

   http://www.funtoo.org/wiki/ReBootstrap

And each time, when you try to create the base system from something  
other than an existing gentoo system it just _melted_down_ and went off  
on a tangent to fix something else.

I eventually went "ok, there are three problems here":

1) I'm trying to build a distro on something other than an existing  
copy of that distro.

2) I'm trying to use a different libc (and different toolchain, but  
that's less of an issue).

3) The existing system I'm providing uses busybox instead of the  
specific versions of the gnu/dammit tools they expect (and boy were  
they version-sensitive and configuration sensitive, things like python  
requiring bzip2 shared libraries to exist on the host when it's built  
or else package extraction won't work because portage doesn't know how  
to pipe stuff through bzip2, just use the optional python shared  
library wrapper).

So I went "if I build Linux From Scratch I can deal with 2 and 3  
separately, and then rebootstrap portage under the resulting LFS system  
on the target, and it's a huge digression but can be completely  
automated, so..." (And that's before getting into trying to wean  
portage off of the requirement of explicitly naming every supported  
target in every single ebuild file in the entire tree, so that adding a  
new target requires touching every file in the portage tree and the  
idea of telling gentoo "just build whatever architecture the host is"  
is fundamentally against the way they designed it... Yeah, that was me  
going "funtoo, how does _that_ work"?)

You may have noticed that my todo list has archaeological strata. Right  
now Toybox has put all this on hold, and the rise of Android has  
probably rendered some of it moot...

An advantage YOU have is existing gentoo developers with interest who  
you may be able to foist this off on. Plus you're just trying to swap  
out _one_ component at a time, and only support a few specific  
architectures.

> > - Write linux from scratch "musl hint", contribute it to LFS, then  
> link
> >   to it on LFS website from musl website.
> 
> Can you elaborate on what a "musl hint" would be?

Basically they're standalone "or you could do it _this_ way"  
explanations for alternatives or extensiosn to the way Linux From  
Scratch does stuff:

   http://hints.linuxfromscratch.org

   http://www.linuxfromscratch.org/hints/read.html

They're referenced from time to time in the main Linux From Scratch  
book, ala:

   http://www.linuxfromscratch.org/lfs/view/stable/chapter08/kernel.html

And at the end it's one of the things they point you at:

    
http://www.linuxfromscratch.org/lfs/view/stable/chapter09/whatnow.html

The "Beyond Linux From Scratch" book more or less evolved out of the  
pile of hints, trying to turn it into a bigger systematic sequel book  
of additional stuff you can build. But the hints profide alternatives  
to the base infrastructure, such as BSD-style init scripts instead of  
SysV style:

   http://www.linuxfromscratch.org/hints/downloads/files/bsd-init.txt

Or using uClibc instead of glibc in the base system:

   http://www.linuxfromscratch.org/hints/downloads/files/uclibc.txt

(Of course BLFS has its own problems. Their last release was in 2008  
and they went to one of those "everybody just use svn and ping us if  
it's broken" things because their development model's become too  
dysfunctional to cut releases anymore.)

Anyway, advantage of this: if they take it you can then link to it from  
musl's website and go "hey build your own system guys, here's how you  
do a musl based LFS". It's not _explicitly_ that LFS would be endorsing  
you, but it feels that way a little bit. :)

> > - is userbase of glibc, uClibc, klibc, or dietlibc better served by
> > musl?
> >   - contribute musl option to buildroot?
> >   - contribute musl option to crosstool-ng?
> 
> There's demand for musl in crosstool-ng at least; the maintainer has
> expressed this, but is largely unfamiliar with musl and waiting for a
> patch from someone willing to do it.

He's a good guy. I'm not a fan of the design of his project (driving it  
makes The Tardis look user-friendly), but a lot of people find it  
useful.

> >   - Ask mentor graphics (formly code sourcery) to do a musl  
> toolchain?
> >     - LOTS of proprietary embedded devs use this one, it's
> > "professional".
> 
> I suspect they might be particularly interested since their customers
> might need to avoid copyleft code.

Or at least the random threat of lawsuits even if they _try_ to conform.

Not gonna rant. Nope. Not gonna.

> >     - windriver.com is now a wholly owned subsidiary of intel
> >   - klibc guys are initramfs@...r or embedded@...r (see lists)
> >     - ask clibc author Peter Anvin if musl serves his needs?
> 
> I think musl essentially obsoletes klibc. The main added cost of musl
> over klibc for initrds, etc. is the soft-float code that will get
> linked in due to printf on archs with no hard-float. If this is a
> problem, we could eventually support an option with musl to inhibit
> printf float code from getting linked at static-link time.

A "./configure --disable-soft-float" would be nice just for bragging  
rights.

> This is a
> bit nasty but could be done with weak symbol tricks. Of course, even
> with all the soft-float code, I think binaries linked to musl will be
> significantly smaller than all the kernel modules, firmware, etc.
> stored on an initrd.
> 
> On the other side, the big advantage of musl over klibc is that you
> don't have to worry about whether the apps you need will be okay with
> the limited/non-conformant functionality provided by klibc.
> Well-written apps should "just work", and be small.

An _ideal_ situation would be to get Peter Anvin to end klibc  
development, point his users at musl, and possibly even become a musl  
user/developer. I admit the diplomacy to arrange such an outcome is  
beyond me.

However, it would be nice to ask him what he gets out of klibc. If it's  
providing a reference implementation or using it to test system call  
generation or some such, possibly musl could fill this role. If there's  
something specific klibc does, it would be nice if musl could also do  
it.

> > - websites that might review musl if we ask nicely:
> >   - linux
> >     - lwn.net (submit via lwn@....net)
> >     - h-online (ping @codepope on twitter)
> >     - Linux Journal
> >     - Linux Today (they'll just link elsewhere)
> 
> I think getting the 1.0 release on Reddit, Hacker News, etc. would be
> useful too. If for nothing else, as one step closer to the magic 7.

Obviously, none of these lists are exhaustive. :)

But if we add to them much, collating to create a master list sounds  
like a job for a wiki.

> >   - android
> >     - not personally familiar, google for "android news" finds  
> several.
> >     - works well with android kernel, installs side-by-side with
> > bionic,
> >       static links well, doesn't introduce any new licensing issues,
> >       provides full posix environment, active and responsive dev
> > community.
> 
> Yep. I'm not familiar with these sites either though.

Enthuse to the cyanogen mod guys, send them to enthuse to others?

   http://www.homeonthestrange.com/view.php?ID=28

> > - ask people on mailing list and irc to blog/tweet about the 1.0
> > release when it
> >   happens.
> 
> Yes, this is definitely an under-utilized aspect of the (now rather
> large) community.

Word of mouth is the best asset, but buzz is all about combo bonuses.

The _other_ thing you might want to do is pull up the original BBC  
"kitchen nightmares" on Netflix streaming and watch Gordon arrange a  
full set of customers for each failing restaurant, at which point  
hilarity inevitably ensues.

"OK, you've achieved basic competence. Now a thundering horde of a  
gazillion people
show up wanting to try your thing. How do you avoid service melting  
into a puddle
under the load?"

Lots of people are not prepared for _success_. You've got to acclimate  
newbies. You've got to have a website that can handle the downloads.  
Mailing list traffic spikes. I dunno if this will happen, but _if_ it  
does, are you prepared?

Ideally you'd have not just a goot FAQ and web pages but "the book of  
musl" which can act as both tutorial and reference (two different  
functions), and designated hand-holders in the community fielding a  
flood of newbies.

This is probably hashing your chickens before counting them, of course,  
but I wanted to at least bring it up.

For example, if you put your musl porting guide online (p.s. put your  
musl porting guide online) and you suddenly have three different people  
submitting ports to different architectures, the testing burden's gonna  
get nuts. The "why doesn't it work with this package" requests could  
spike beyond the ability to field. Bug tracker. Translations, including  
people translating the documentation and web pages themselves (with all  
the version skew that entails). Triaging and merging forks. Patches  
winding up in distro repositories and not necessarily making their way  
back upstream promptly...

Yeah yeah, such problems we should have. Just don't be surprised by  
them. :)

Rob

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.