"linux-libre"
On the subject of GeneralThe official “vanilla” Linux kernel from Linus that gets distributed on kernel.org has non-free[1] software in it. Here is one example from linux-2.6.24/drivers/net/tg3.c:
/* * tg3.c: Broadcom Tigon3 ethernet driver. * * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller (davem@redhat.com) * Copyright (C) 2001, 2002, 2003 Jeff Garzik (jgarzik@pobox.com) * Copyright (C) 2004 Sun Microsystems Inc. * Copyright (C) 2005-2007 Broadcom Corporation. * * Firmware is: * Derived from proprietary unpublished source code, * Copyright (C) 2000-2003 Broadcom Corporation. * * Permission is hereby granted for the distribution of this firmware * data in hexadecimal or equivalent format, provided this copyright * notice is accompanying it. */
It then has screenfulls of non-free code like this:
0x0e000003, 0x00000000, 0x08001b24, 0x00000000, 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, 0x3c1d0800, 0x37bd4000, 0x03a0f021, 0x3c100800, 0x26100000, 0x0e000010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe, 0xafbf0018, 0x0e0005d8, 0x34840002, 0x0e000668, 0x00000000, 0x3c030800, 0x90631b68, 0x24020002, 0x3c040800, 0x24841aac, 0x14620003, 0x24050001, 0x3c040800, 0x24841aa0, 0x24060006, 0x00003821, 0xafa00010, 0x0e00067c, 0xafa00014, 0x8f625c50, 0x34420001, 0xaf625c50, 0x8f625c90, 0x34420001, 0xaf625c90, 0x2402ffff, 0x0e000034, 0xaf625404, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c, 0xafb20018, 0xafb10014, 0x0e00005b, 0xafb00010, 0x24120002, 0x24110001, 0x8f706820, 0x32020100, 0x10400003, 0x00000000, 0x0e0000bb, 0x00000000, 0x8f706820, 0x32022000, 0x10400004, 0x32020001, 0x0e0001f0, 0x24040001, 0x32020001, 0x10400003, 0x00000000, 0x0e0000a3, 0x00000000, 0x3c020800, 0x90421b98, 0x14520003, 0x00000000, 0x0e0004c0, 0x00000000, 0x0a00003c, 0xaf715028, 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ac0, 0x00002821, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x3c040800, 0x248423d8, 0xa4800000, 0x3c010800, 0xa0201b98, 0x3c010800, 0xac201b9c, 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac, 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bbc, 0x8f624434, 0x3c010800, 0xac221b88, 0x8f624438, 0x3c010800, 0xac221b8c, 0x8f624410, 0xac80f7a8, 0x3c010800, 0xac201b84, 0x3c010800, 0xac2023e0, 0x3c010800, 0xac2023c8,
Why Linus Torvalds tolerates and distributes this I have no idea. He surely has some rationale buried in a LKML flamewar somewhere, but it doesn’t change the fact that there is clearly non-Free code in the Linux kernel.
A little over three years ago BLAG made a commitment[2] to RMS to only distribute software that met the Free Software Definition. Since then, I have learned about the issues with the non-Free Linux kernel (IIRC around the time gnewsense popped up). I kept punting the issue hoping it would just go away and upstream would solve it. They haven’t and the blobs remained in the kernel.
After talking to Jaromil from dynebolic, looking at the gnewsense approach (which has to remove additional non-free blobs that ubuntu adds), and debian’s approach I felt a single clean source tarball would be of benefit to everyone who wants a truly Free Linux kernel. This new cleaned kernel source has been dubbed “linux-libre” and I am its janitor. It is available here:
ftp://ftp.blagblagblag.org/pub/BLAG/linux/kernel/v2.6
If you actually go there, you’ll see a TESTING directory–currently that is where the tarballs are stored, but once everything is finalized they’ll be in the main directory. One issue I wanted to settle before moving things from TESTING was a version numbering system that we could live with long term. I have settled on the following approach, which is subject to change if anyone comes up with good objections: I’m adding a last digit to show the “libre” release based on the upstream kernel. Examples:
Linus version Linux Libre version 2.6.24 2.6.24.0.0 first libre release 2.6.24 2.6.24.0.1 second libre release 2.6.24.1 2.6.24.1.0 first libre release 2.6.24.1 2.6.24.1.1 second libre release 2.6.24.2 2.6.24.2.5 sixth libre release
So the latest linux-libre release is 2.6.24.2.1–my second spin based on upstream’s 2.6.24.2. In sum, the last digit is mine, the previous digits match upstream.
The `deblob` script used to clean the kernel is in the scripts/ directory of the tarball and can be used to clean other kernels.
Now that there is a nice tarball to use as a base, BLAG will be building it’s own kernels based upon that and not distributing any Fedora kernels. We have unreleased ISOs spun that are using this new kernel and kernel RPMs are hitting the repository. “Real-soon-now” we’ll have new BLAG releases.
All for now,
-Jeff
[1] http://www.fsf.org/licensing/essays/free-sw.html
[2] http://forums.blagblagblag.org/viewtopic.php?t=571
BLAG forum thread on linux-libre:
http://forums.blagblagblag.org/viewtopic.php?t=4580
See also:
http://wiki.debian.org/KernelFirmwareLicensing
svn://svn.debian.org/kernel/dists/trunk/linux-2.6/debian/patches/debian/dfsg/files-1
http://svn.gnewsense.svnhopper.net/gnewsense/builder/trunk/firmware/firmware-removed
The initial list of removed drivers (additions/corrections most welcome):
######################## # Removed char Drivers # ######################## COMPUTONE - Computone IntelliPort Plus serial ATARI_DSP56K - DSP56001 Device Driver DRM_MGA - Matrox g200/g400 DRM_R128 - ATI Rage 128 DRM_RADEON - ATI Radeon ######################### # Removed Media Drivers # ######################### DVB_TDA10021 - Philips TDA10021 based DVB_TDA8083 - Philips TDA8083 based DVB_VES1820 - VLSI VES1820 based DVB_VES1X93 - VLSI VES1893 or VES1993 based DVB_AV7110 - AV7110 cards DVB_BUDGET_AV - Budget cards with analog video inputs DVB_BUDGET_CI - Budget cards with onboard CI connector DVB_TTUSB_BUDGET - Technotrend/Hauppauge Nova-USB devices USB_PWC - USB Philips Cameras VIDEO_CPIA - CPiA Video For Linux USB_DABUSB - DABUSB driver USB_SN9C102 - USB SN9C1xx PC Camera Controller support USB_IBMCAM - USB IBM (Xirlink) C-it Camera support USB_VICAM - USB 3com HomeConnect (aka vicam) ####################### # Removed net Drivers # ####################### ACENIC - Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit ADAPTEC_STARFIRE - Adaptec Starfire/DuraLAN support BNX2 - Broadcom NetXtremeII CASSINI - Sun Cassini E100 - Intel(R) PRO/100+ MYRI_SBUS - MyriCOM Gigabit Ethernet TEHUTI - Tehuti Networks 10G Ethernet TIGON3 - Broadcom Tigon3 TYPHOON - 3cr990 series Typhoon COPS - COPS LocalTalk PC YAM - YAM driver for AX.25 PCMCIA_SMC91C92 - SMC 91Cxx PCMCIA 3C359 - 3Com 3C359 Token Link Velocity XL adapter SMCTR - SMC ISA/MCA adapter USB_KAWETH - USB KLSI KL5USB101-based ethernet device support ######################## # Removed s390 Drivers # ######################## QETH - Gigabit Ethernet device support ######################## # Removed SCSI Drivers # ######################## SCSI_QLOGICPTI - PTI Qlogic, ISP Driver SCSI_ADVANSYS - AdvanSys SCSI SCSI_QLOGIC_1280 - Qlogic QLA 1240/1x80/1x160 SCSI ####################### # Removed USB Drivers # ####################### USB_EMI26 - EMI 2|6 USB Audio interface USB_EMI62 - EMI 6|2m USB Audio interface USB_SISUSBVGA - USB 2.0 SVGA dongle support (Net2280/SiS315) USB_SERIAL_KEYSPAN_MPR - USB Keyspan MPR Firmware USB_SERIAL_KEYSPAN_USA18X - USB Keyspan USA-18X Firmware USB_SERIAL_KEYSPAN_USA19 - USB Keyspan USA-19 Firmware USB_SERIAL_KEYSPAN_USA19QI - USB Keyspan USA-19QI Firmware USB_SERIAL_KEYSPAN_USA19QW - USB Keyspan USA-19QW Firmware USB_SERIAL_KEYSPAN_USA19W - USB Keyspan USA-19W Firmware USB_SERIAL_KEYSPAN_USA28 - USB Keyspan USA-28 Firmware USB_SERIAL_KEYSPAN_USA28XA - USB Keyspan USA-28XA Firmware USB_SERIAL_KEYSPAN_USA28XB - USB Keyspan USA-28XB Firmware USB_SERIAL_KEYSPAN_USA28X - USB Keyspan USA-28X Firmware USB_SERIAL_KEYSPAN_USA49W - USB Keyspan USA-49W Firmware USB_SERIAL_KEYSPAN_USA49WLC - USB Keyspan USA-49WLC Firmware USB_SERIAL_EDGEPORT - USB Inside Out Edgeport Serial Driver USB_SERIAL_EDGEPORT_TI - USB Inside Out Edgeport Serial Driver (TI devices) USB_SERIAL_TI - USB TI 3410/5052 Serial Driver USB_SERIAL_WHITEHEAT - USB ConnectTech WhiteHEAT Serial Driver ######################### # Removed video Drivers # ######################### FB_ASILIANT - Asiliant (Chips) 69000 display support FB_CT65550 - Chips 65550 display support ######################### # Removed Sound Drivers # ######################### SND_CS46XX - Cirrus Logic (Sound Fusion) SND_KORG1212 - Korg 1212 IO SND_MAESTRO3 - ESS Allegro/Maestro3 SND_YMFPCI - Yamaha YMF724/740/744/754