directory-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Adding firmware to FSD


From: Denis 'GNUtoo' Carikli
Subject: Re: Adding firmware to FSD
Date: Sun, 21 Nov 2021 03:29:33 +0100

On Tue, 5 Oct 2021 18:09:07 -0400
John Sullivan <johns@fsf.org> wrote:

> I suggest limiting the listings in the Directory to free firmware
> that isn't already shipped as part of Linux and Linux-Libre. In other
> words, things that users might have to specifically go and download
> separately from what they already have.
There are several projects that could be interesting to review,
especially their source code for FSDG compliance and FSD inclusion at
the same time.

There are a lot of interesting firmware that run on microcontroller
boards for instance:
- We have some python programming language firmwares:
- https://en.wikipedia.org/wiki/Micropython
- https://en.wikipedia.org/wiki/CircuitPython

We have free source code of firmwares that run on various
microcontroller boards to implement a protocol compatible with
flashrom[1]. With that you can for instance build hardware to install
Libreboot on various laptops:
- https://github.com/urjaman/frser-duino.git[2]. Note that it has
  dependencies from other repositories (in the form of git submodules)
  so theses should also be reviewed.
- Other similar projects can probably be found in the flashrom wiki.
  Though frser-duino and various related projects/forks was the main one
  last time I checked.

There is some firmware for hardware to sniff the traffic between the
SIM card and the modem (for instance to find out privacy
implications[3]):
- https://osmocom.org/projects/simtrace2/wiki
- https://osmocom.org/projects/simtrace/wiki/SIMtrace
Both should have 100% free software firmwares (including bootloaders)
and the tools to recover the boards (to reinstall the firmware from
scratch) are free software AFAIK.

The Osmocom project also built hardware to interface with
GSM/2G/3G/4G/5G towers that has probably a fully free firmware (along
with free FPGA designs):
https://osmocom.org/projects/e1-t1-adapter/wiki/IcE1usb

We have gnuk and neug[4] that are respectively a free firmware to
implement an USB token for gpg and a firmware to implement an RNG (gnuk
uses most of neug code). These should also be fully free software and
should also function without a dedicated bootloader (for improved
security).

We also have code to implement JTAG probes directly in hardware
(instead of using openOCD):
- https://github.com/blacksphere/blackmagic/wiki/Debugger-Hardware

OsmocomBB is a free firmware for some older mobile phones, and in some
cases it even contains free bootloader, and in other case it's able to
reuse the existing bootloader that is either on a ROM (not rewritable)
or on a flash chip (rewritable):
- https://osmocom.org/projects/baseband/wiki

There are various free software keyboards firmwares:
- https://github.com/tmk/tmk_keyboard
- https://qmk.fm/

There are probably several firmwares for embedded controllers, that are
chip that handle laptop keyboards, laptop power on/off with the voltage
rails, etc. 
- The novena (https://kosagi.com/w/index.php?title=Novena_Main_Page)
  has one based on ChibiOS (an OS for microcontroller).
- The olimex laptop and probably several other laptops probably have
  other free software firmwares for embedded controller, and it would
  be a really good idea to document which free firmwares exist to then
  be able to more easily check which laptops have free software
  embedded controller firmwares. 

  This has a big impact on freedom so it looks important for the future
  as keyboards can act as keylogger for instance, or be repurposed
  (thanks to firmware modifications) to do many great things, like
  being more inclusive (for people with motion issues), or implement
  neat productivity (like special key combinations) or security features
  (like password managers).

For arduinos, there is also the firmata firmware that exports the
arduino I/O to be used by a computer:
- https://www.firmata.org

For several logic analyzer using the Cypress FX2 chip, there is a free
firmware:
- https://sigrok.org/wiki/Fx2lafw

And there is probably a lot more. 

Most of them are related to hardware projects that cover some specific
uses cases and that reuse commonly available microcontroller boards
(like frser-duino) or that designed hardware for that task (like the
simtrace boards). Some projects (like gnuk) support both (common
microcontroller boards and hardware designed for the specific purpose
that gnuk was meant for).

Firmwares for WiFi chips are less common for instance as they require a
lot more work (including reverse engineering and implementation of more
complete WiFi firmwares).

When reviewing projects, we should watch out for project that depend on
nonfree software in one form of another. 

For instance, there are a lot of project for the ESP32 or ESP8089
microcontroller chips, but a lot of them depend on nonfree WiFi
binaries that are shipped as part of the official toolchain (based on
the GNU toolchain like gcc, binutils, etc). Some of these projects
don't use the WiFi feature of these chips and probably work with the
free toolchain.

Some of the well known microcontroller boards also probably have
nonfree bootloaders. An easy way to avoid that issue completely would
be to look if the firmwares also contain a (free software) bootloader.

Though bootloaders are somehow equivalent to BIOSes, and as I
understand nonfree BIOS are not an issue for the free software
directory (including for software that interacts with it). This has
already been discussed in previous thread(s) along with the rationale
for it.

As for finding more hardware that can run free software firmwares and
the equivalent free software firmwares, it's possible to find many
projects based on their USB or Ethernet MAC addresses[5] because
OpenMoko donated its USB IDs and Ethernet MAC addresses to the FLOSS
hardware and software community.

References:
-----------
[1]https://flashrom.org
[2]To get the source code (from github) without JavaScript we can use
   the 'git clone https://github.com/urjaman/frser-duino.git' command
   instead (here for frser-duino).
[3]https://terminal-profile.osmocom.org/
[4]https://www.fsij.org/gnuk/
[5]http://wiki.openmoko.org/wiki/USB_Product_IDs#USB_Vendor_and_Product_IDs

Denis.

Attachment: pgp5_cSfnNAtj.pgp
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]