The time to complete the ELF transition has come.

More to the point, progress has stopped and there is no sign of things getting going and finishing off the remaining rough edges without a bit more of a shove.

Please read this through carefully before getting out the flamethrowers or starting a reply.

There are some known problems and rough edges still. They are not getting fixed because not enough of the developers are using it. Note that people installing 3.0-RELEASE get ELF by default, and 3.0.1 will have an ELF kernel too. We need to get the remaining developers (kicking and screaming if necessary) onto the bandwagon or the current outstanding problems are going to be present in 3.0.1 as well.

The state of the ELF world today is that just about everything important works for just about everybody.

Specifically:

In all, we're about as ready as we're ever going to be without getting more people bashing at the code.

However, the problems and risks:

The plan:

January 6 becomes The Day. (E2-day? E-squared day? :-)

On that day, 'make world' to build an a.out would will be blocked. Not destroyed, not removed, just blocked. I would like it to be sufficiently crippled so that it isn't too hard to get going again in an emergency or if somebody is really badly affected. Perhaps something like:

make -DYES_I_KNOW_THIS_IS_ON_BORROWED_TIME world or requiring the src/Makefile* file to be edited to remove the block. It would be a waste if 95% of people reflexively turned on a hook in /etc/make.conf out of laziness, resistance to change, whatever, if it's too easy to take the 'do nothing' option. People must then do a 'make aout-to-elf' or install an ELF binary dist or something.

On the same day, the default kernel format would get changed to ELF.. People can do an

echo /boot/loader > /boot.config or install new bootblocks (disklabel -B da0 / wd0 etc). As insurance to try and avoid feet getting blown off and people getting stranded with unbootable systems, either use a small bootblock reader to check that new bootblocks are in place, or force the user to manually set a flag to signify that they have done something about the bootstrap issue.

Barring any really major showstoppers, this will go ahead in the early hours of January 6 (in the USA) and later in the day for the rest of the world due to timezone differences.

What you can do right now:

This is what a successful boot looks like using the new bootblocks and /boot/loader. (Yes, this loader and kernel is a little old, but it shows just how long this stuff has been sitting in limbo)

>> FreeBSD/i386 BOOT Default: 0:da(0,a)/boot/loader boot: text=0x1000 data=0x1b000 bss=0x0 symbols=[+0x0] entry=0x100000 Console: serial port BIOS drive A: is disk0 BIOS drive C: is disk1 FreeBSD/i386 bootstrap loader, Revision 0.2 639/64512kB (root@beast.netplex.com.au, Fri Oct 16 23:15:13 WST 1998) > set bootfile=/kernel > autoboot 10 Hit [Enter] to boot immediately, or any other key for command prompt. Booting [/kernel] in 9 seconds... Booting [/kernel]... /kernel text=0xe1348 data=0x12994+0x1b9f0 syms=[0x4+0x191b0+0x4+0x14fa5] BIOS basemem: 639K, extmem: 64512K (from 0xe801 call) Copyright (c) 1992-1998 FreeBSD Inc. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. FreeBSD 3.0-CURRENT #263: Sat Dec 5 18:29:39 WST 1998 peter@beast.netplex.com.au:/home/src/sys/compile/BEAST Timecounter "i8254" frequency 1193182 Hz CPU: Pentium Pro (686-class CPU) Origin = "GenuineIntel" Id = 0x619 Stepping=9 Features=0xfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV> real memory = 67108864 (65536K bytes) config> quit avail memory = 62861312 (61388K bytes) Programming 24 pins in IOAPIC #0 FreeBSD/SMP: Multiprocessor motherboard cpu0 (BSP): apic id: 0, version: 0x00040011, at 0xfec08000 cpu1 (AP): apic id: 12, version: 0x00040011, at 0xfec08000 io0 (APIC): apic id: 13, version: 0x00170011, at 0xfec00000 Preloaded elf kernel "kernel" at 0xf0240000. Probing for devices on PCI bus 0: [..]

Note the 'preloaded elf kernel' bit. This is the in-kernel linker (KLD) finding itself in the tables that the /boot/loader prepared for it.

Finally.. Try a

make aout-to-elf-build and make sure it works. If it does, make sure you've backed up any critical data and try a make aout-to-elf-install and see how you go.

Note that on a pre-3.0 system, the 'make aout-to-elf' and 'make aout-to-elf-install' scripts require that you manually convert your kernel config to 3.0 level and place it as src/sys/i386/conf/GENERICupgrade. Copy the plain GENERIC and start from that if necessary. WARNING: The ELF upgrade process WILL ask to reboot your machine at the end!

Note that aout-to-elf will not install an ELF kernel for you! Just do one thing at a time, ie: get an ELF binary world running. Once you've got that sorted out, then try building an updated ELF kernel.

If you need to make comments or ask questions, please send mail to the current@FreeBSD.org mailing list. Both success and failure reports are welcome.