And let's not forget John Lewis' excellent work on JELTKA for chromebooks, which is also Linux and kexec. I've used it and it's great.
I have a replacement for petitboot which is an all-Go userland: u-root. Programs in the root file system are Go source and are compiled on first use -- there's a full Go toolchain embedded in flash. There are only 5 userland binaries on the root file system, four of which are Go toolchain, one is /init, and the rest is all Go source. I've got this working today on a KGPE-D16. I first tested it in Prague in 2014, and we've also had it working on the Gizmo II and a Chromebox. If you have 16 MiB flash, it just works -- really.
So there's five efforts, working today, all based on linux and kexec, and at least one in commercial use.
I think the lifeboat should come with a penguin painted on its side. It's known to work -- since 1999 :-) -- and it avoids recreating the full universe of drivers, protocols, file systems, and so on.
ron
On Sat, Nov 26, 2016 at 4:20 PM Zaolin zaolin@das-labor.org wrote:
In my opinion there are currently two payloads which are really interesting and promising for end users:
I am currently working on the UI of Heads. So feel free to contribute ;)
Best Regards
Zaolin
On 11/26/2016 11:47 PM, ron minnich wrote:
Oh, my fingers type too much for me now.
The current set of (as you point out) not terrific options is a result of linux growing too big for flash, and flash growing too SMALL for linux, ca. 2002, when we adopted the payload model.
On Sat, Nov 26, 2016 at 3:46 PM ron minnich rminnich@gmail.com wrote:
coreboot today is linuxbios minus the linux. The original intent was always that linux be our lifeboat. The current set of (as you point out) not terrific options is a result of linux growing too big for flash, and flash growing too big for linux, ca. 2002, when we adopted the payload model. The original keyword in the config file was 'linux', not 'payload'. The bootloaders we adopted (etherboot, filo, ...) were never (to me) a very satisfactory replacement for linux. They always came with lots of limitations.
But why linux? Why a full OS? Simple observation, here in my 35th year of working with firmware and bootloaders.
Every bootloader starts simple, and becomes an OS. Every single one starts with the intent of being small and compact and only supporting some needed subset of file systems/devices/protocols and ends up implementing everything. Because there was an attempt to start out simple, no matter how good the intial design is, that design is overwhelmed by the continuous addition of features, the result being a badly bloated, huge system with no apparent design.
The exception, it has been argued, is EFI, which had some sort of design in 1999. From my point of view, it skipped right past all the initial stages and entered the world bloated and with no apparent design, or at least not a very good one.
So you need to think, not in terms of lean and clean, but in terms of what it looks like after a few years when everyone has attached their favorite features to your lifeboat. I think it's a mistake to ever think you are going to implement some limited-function, limited-footprint bootloader, because people will jump on it and just add code. Just look at what's happened with systemd.
Also worth considering is that the tinykernel configs have got linux down to 400K. You can trim it down to that, and carefully add features back. This comes with huge benefits I think. You get drivers that work, protocols that work, all the file systems you want, and you can put nice interactive boot UIs in user mode. Today's flash parts are more than large enough to do a good environment -- tinycore linux could be used, for example, once it was trimmed a bit. It's only about 12M today with a full X environment.
Power8 and Power9 systems use linux in flash as their bootloader. This example has not been lost on other systems being developed today.
I think it's worth considering a tinykernel linux as bootloader before you start with a new thing.
ron