On Thu, Apr 30, 2015 at 02:34:22PM -0400, John Stoffel wrote:
Andy> I would like to know if any proprietary binary blobs are Andy> required to use a Beaglebone Black.
Andy> According to my findings, the Raspberry Pi has a proprietary binary blob Andy> involved with booting the machine, and also controlling the video. It Andy> wasn't so easy to find this information.
Andy> I would prefer to use such a board with no proprietary software. That's Andy> why I'm considering the Beaglebone Black.
Hmmm... I've got one running now. Looking at the kernel config, I see:
CONFIG_FIRMWARE_IN_KERNEL=y CONFIG_EXTRA_FIRMWARE="am335x-pm-firmware.bin" CONFIG_EXTRA_FIRMWARE_DIR="firmware"
So it's running a binary blob for something. And that looks to be for power management. So it might not be required.
It may not be that well known, but various PC perhipherals also require binary blobs. They may ship separately from the linux kernel package, depending on your distro, but they may still be required for certain functionality. For example Fedora 21, which prides itself on having a strict free-software and patent unencumbered software policy, still ships with binary blobs:
rpm -qa --qf='%{license}\t%{name}-%{version}-%{release}.%{arch}\n' \*firmware\* GPL+ and GPLv2+ and MIT and Redistributable, no modification permitted linux-firmware-20150316-44.git020e534e.fc21.noarch Redistributable, no modification permitted iwl105-firmware-18.168.6.1-44.fc21.noarch Redistributable, no modification permitted iwl2030-firmware-18.168.6.1-44.fc21.noarch Redistributable, no modification permitted iwl6000g2a-firmware-18.168.6.1-44.fc21.noarch Redistributable, no modification permitted atmel-firmware-1.3-13.fc21.noarch Redistributable, no modification permitted iwl7260-firmware-25.15.12.0-44.fc21.noarch Redistributable, no modification permitted iwl3160-firmware-25.15.12.0-44.fc21.noarch Redistributable, no modification permitted ipw2200-firmware-3.1-10.fc21.noarch (MIT or GPLv2+) and Redistributable, no modification permitted midisport-firmware-1.2-13.fc21.noarch Redistributable, no modification permitted libertas-usb8388-firmware-20150316-44.git020e534e.fc21.noarch Redistributable, no modification permitted iwl5000-firmware-8.83.5.1_1-44.fc21.noarch Redistributable, no modification permitted iwl1000-firmware-39.31.5.1-44.fc21.noarch Redistributable, no modification permitted iwl4965-firmware-228.61.2.24-44.fc21.noarch Redistributable, no modification permitted iwl100-firmware-39.31.5.1-44.fc21.noarch Redistributable, no modification permitted ipw2100-firmware-1.3-17.fc21.noarch Redistributable, no modification permitted iwl6000-firmware-9.221.4.1-44.fc21.noarch Redistributable, no modification permitted iwl135-firmware-18.168.6.1-44.fc21.noarch GPLv2 zd1211-firmware-1.4-10.fc21.noarch Redistributable, no modification permitted iwl5150-firmware-8.24.2.2-44.fc21.noarch Redistributable, no modification permitted iwl6000g2b-firmware-18.168.6.1-44.fc21.noarch Redistributable, no modification permitted crystalhd-firmware-3.10.0-8.fc21.noarch Redistributable, no modification permitted iwl2000-firmware-18.168.6.1-44.fc21.noarch Redistributable, no modification permitted iwl3945-firmware-15.32.2.9-44.fc21.noarch Redistributable, no modification permitted iwl6050-firmware-41.28.5.1-44.fc21.noarch
Most of those are for Wi-Fi or wired chipsets or video decoders. But let's take a look more closely at linux-firmware. There is lots of stuff in there: /usr/lib/firmware/3com /usr/lib/firmware/acenic /usr/lib/firmware/adaptec /usr/lib/firmware/advansys /usr/lib/firmware/agere_ap_fw.bin /usr/lib/firmware/agere_sta_fw.bin /usr/lib/firmware/amd-ucode /usr/lib/firmware/ar3k /usr/lib/firmware/ar5523.bin /usr/lib/firmware/ar7010_1_1.fw /usr/lib/firmware/ar7010.fw /usr/lib/firmware/ar9170-1.fw /usr/lib/firmware/ar9170-2.fw /usr/lib/firmware/ar9271.fw /usr/lib/firmware/as102_data1_st.hex /usr/lib/firmware/as102_data2_st.hex /usr/lib/firmware/ath3k-1.fw /usr/lib/firmware/ath6k /usr/lib/firmware/atmsar11.fw /usr/lib/firmware/av7110 /usr/lib/firmware/bnx2 /usr/lib/firmware/bnx2x /usr/lib/firmware/bnx2x-e1-4.8.53.0.fw /usr/lib/firmware/bnx2x-e1-5.2.13.0.fw /usr/lib/firmware/bnx2x-e1-5.2.7.0.fw /usr/lib/firmware/bnx2x-e1h-4.8.53.0.fw /usr/lib/firmware/bnx2x-e1h-5.2.13.0.fw /usr/lib/firmware/bnx2x-e1h-5.2.7.0.fw /usr/lib/firmware/brcm /usr/lib/firmware/carl9170-1.fw /usr/lib/firmware/cbfw-3.2.1.1.bin /usr/lib/firmware/cbfw-3.2.3.0.bin /usr/lib/firmware/cbfw-3.2.5.1.bin /usr/lib/firmware/cis /usr/lib/firmware/cmmb_vega_12mhz.inp /usr/lib/firmware/cmmb_venice_12mhz.inp /usr/lib/firmware/configure /usr/lib/firmware/cpia2 /usr/lib/firmware/ct2fw-3.2.1.1.bin /usr/lib/firmware/ct2fw-3.2.3.0.bin /usr/lib/firmware/ct2fw-3.2.5.1.bin /usr/lib/firmware/ctfw-3.2.1.1.bin /usr/lib/firmware/ctfw-3.2.3.0.bin /usr/lib/firmware/ctfw-3.2.5.1.bin /usr/lib/firmware/cxgb3 /usr/lib/firmware/cxgb4 /usr/lib/firmware/dabusb /usr/lib/firmware/dsp56k /usr/lib/firmware/dvb-fe-xc4000-1.4.1.fw /usr/lib/firmware/dvb-fe-xc5000-1.6.114.fw /usr/lib/firmware/dvb-fe-xc5000c-4.1.30.7.fw /usr/lib/firmware/dvb_nova_12mhz_b0.inp /usr/lib/firmware/dvb_nova_12mhz.inp /usr/lib/firmware/dvb-usb-dib0700-1.20.fw /usr/lib/firmware/dvb-usb-it9135-01.fw /usr/lib/firmware/dvb-usb-it9135-02.fw /usr/lib/firmware/dvb-usb-terratec-h5-drxk.fw /usr/lib/firmware/e100 /usr/lib/firmware/edgeport /usr/lib/firmware/emi26 /usr/lib/firmware/emi62 /usr/lib/firmware/ene-ub6250 /usr/lib/firmware/f2255usb.bin /usr/lib/firmware/go7007 /usr/lib/firmware/GPL-3 /usr/lib/firmware/htc_7010.fw /usr/lib/firmware/htc_9271.fw /usr/lib/firmware/i2400m-fw-usb-1.4.sbcf /usr/lib/firmware/i2400m-fw-usb-1.5.sbcf /usr/lib/firmware/i6050-fw-usb-1.5.sbcf /usr/lib/firmware/intel /usr/lib/firmware/intelliport2.bin /usr/lib/firmware/isci /usr/lib/firmware/isdbt_nova_12mhz_b0.inp /usr/lib/firmware/isdbt_nova_12mhz.inp /usr/lib/firmware/isdbt_rio.inp /usr/lib/firmware/kaweth /usr/lib/firmware/keyspan /usr/lib/firmware/keyspan_pda /usr/lib/firmware/lbtf_usb.bin /usr/lib/firmware/lgs8g75.fw /usr/lib/firmware/libertas /usr/lib/firmware/Makefile /usr/lib/firmware/matrox /usr/lib/firmware/moxa /usr/lib/firmware/mrvl /usr/lib/firmware/mt7650.bin /usr/lib/firmware/mts_cdma.fw /usr/lib/firmware/mts_edge.fw /usr/lib/firmware/mts_gsm.fw /usr/lib/firmware/mts_mt9234mu.fw /usr/lib/firmware/mts_mt9234zba.fw /usr/lib/firmware/mwl8k /usr/lib/firmware/myri10ge_eth_big_z8e.dat /usr/lib/firmware/myri10ge_ethp_big_z8e.dat /usr/lib/firmware/myri10ge_ethp_z8e.dat /usr/lib/firmware/myri10ge_eth_z8e.dat /usr/lib/firmware/myri10ge_rss_eth_big_z8e.dat /usr/lib/firmware/myri10ge_rss_ethp_big_z8e.dat /usr/lib/firmware/myri10ge_rss_ethp_z8e.dat /usr/lib/firmware/myri10ge_rss_eth_z8e.dat /usr/lib/firmware/myricom /usr/lib/firmware/nvidia /usr/lib/firmware/ositech /usr/lib/firmware/phanfw.bin /usr/lib/firmware/qat_895xcc.bin /usr/lib/firmware/ql2100_fw.bin /usr/lib/firmware/ql2200_fw.bin /usr/lib/firmware/ql2300_fw.bin /usr/lib/firmware/ql2322_fw.bin /usr/lib/firmware/ql2400_fw.bin /usr/lib/firmware/ql2500_fw.bin /usr/lib/firmware/qlogic /usr/lib/firmware/r128 /usr/lib/firmware/r8a779x_usb3_v1.dlmem /usr/lib/firmware/radeon /usr/lib/firmware/README /usr/lib/firmware/rp2.fw /usr/lib/firmware/rsi_91x.fw /usr/lib/firmware/rt2561.bin /usr/lib/firmware/rt2561s.bin /usr/lib/firmware/rt2661.bin /usr/lib/firmware/rt2860.bin /usr/lib/firmware/rt2870.bin /usr/lib/firmware/rt3070.bin /usr/lib/firmware/rt3071.bin /usr/lib/firmware/rt3090.bin /usr/lib/firmware/rt3290.bin /usr/lib/firmware/rt73.bin /usr/lib/firmware/RTL8192E /usr/lib/firmware/rtl_nic /usr/lib/firmware/rtlwifi /usr/lib/firmware/s2250.fw /usr/lib/firmware/s2250_loader.fw /usr/lib/firmware/s5p-mfc.fw /usr/lib/firmware/s5p-mfc-v6.fw /usr/lib/firmware/s5p-mfc-v6-v2.fw /usr/lib/firmware/s5p-mfc-v7.fw /usr/lib/firmware/s5p-mfc-v8.fw /usr/lib/firmware/sdd_sagrad_1091_1098.bin /usr/lib/firmware/slicoss /usr/lib/firmware/sms1xxx-hcw-55xxx-dvbt-02.fw /usr/lib/firmware/sms1xxx-hcw-55xxx-isdbt-02.fw /usr/lib/firmware/sms1xxx-nova-a-dvbt-01.fw /usr/lib/firmware/sms1xxx-nova-b-dvbt-01.fw /usr/lib/firmware/sms1xxx-stellar-dvbt-01.fw /usr/lib/firmware/sun /usr/lib/firmware/sxg /usr/lib/firmware/TDA7706_OM_v2.5.1_boot.txt /usr/lib/firmware/TDA7706_OM_v3.0.2_boot.txt /usr/lib/firmware/tdmb_nova_12mhz.inp /usr/lib/firmware/tehuti /usr/lib/firmware/ti_3410.fw /usr/lib/firmware/ti_5052.fw /usr/lib/firmware/ti-connectivity /usr/lib/firmware/tigon /usr/lib/firmware/tlg2300_firmware.bin /usr/lib/firmware/tr_smctr.bin /usr/lib/firmware/ttusb-budget /usr/lib/firmware/ueagle-atm /usr/lib/firmware/updates /usr/lib/firmware/usbdux /usr/lib/firmware/usbduxfast_firmware.bin /usr/lib/firmware/usbdux_firmware.bin /usr/lib/firmware/usbduxsigma_firmware.bin /usr/lib/firmware/v4l-cx231xx-avcore-01.fw /usr/lib/firmware/v4l-cx23885-avcore-01.fw /usr/lib/firmware/vicam /usr/lib/firmware/vntwusb.fw /usr/lib/firmware/vxge /usr/lib/firmware/whiteheat.fw /usr/lib/firmware/whiteheat_loader.fw /usr/lib/firmware/wsm_22.bin /usr/lib/firmware/yam The FSF maintains a list of distros and their "free-ness". Most of them fail due to including binary blobs: https://www.gnu.org/distros/common-distros.html Here are the ones they consider to be "free": https://www.gnu.org/distros/free-distros.html "This means these distros will include, and propose, exclusively free software. They will reject nonfree applications, nonfree programming platforms, nonfree drivers, nonfree firmware “blobs”, nonfree games, and any other nonfree software, as well as nonfree manuals or documentation."