kernel-libre (hopefully 100% Free) for Fedora 8 and rawhide

jeff moe at blagblagblag.org
Sat Mar 29 21:59:58 UTC 2008


Alexandre Oliva wrote:
> Hi,
> 
> I've stripped non-Free firmware bits from Fedora kernels for F8 and
> rawhide, starting from tools developed by the gNewSense folks and now
> in use by BLAG developers, and built alternate kernels that I've
> successfully booted up and used on my x86_64 notebook.

I just became aware of this thread today. I don't bring BLAG issues to Fedora 
lists, but I felt I should add some info to put linux-libre in context. I hope 
you don't mind--I'll immediately go back to lurking and have no intention of 
getting involved in a debate on this list about the merits/relevancy of this.   :)


====================================================

The 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 at redhat.com)
   * Copyright (C) 2001, 2002, 2003 Jeff Garzik (jgarzik at 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

I have settled on the following approach for versioning: 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

The latest linux-libre release is 2.6.24.4.0--my first release based on 
upstream's 2.6.24.4. In sum, the last digit is mine, the previous digits match 
upstream. The Makefile has "EXTRAVERSION = .4.0-libre" to distinguish the kernel.

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.


-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




More information about the devel mailing list