Steve's blog
   


Steve About
Steve's blog,
The Words of the Sledge
steve@einval.com

Subscribe
Subscribe to the RSS feed.

Links

  • Home
  • Debian
  • PlanetDebian
  • Search PlanetDebian
  • Friends

  • Matthew Garrett
  • Jonathan McDowell
  • Jo McIntyre
  • Martin Michlmayr
  • Andrew Mobbs
  • Mike Pitt
  • Daniel Silverstone
  • Andy Simpkins
  • Neil Williams

  •        

    Tuesday, 19 April 2022

    Firmware - what are we going to do about it?

    TL;DR: firmware support in Debian sucks, and we need to change this. See the "My preference, and rationale" Section below.

    In my opinion, the way we deal with (non-free) firmware in Debian is a mess, and this is hurting many of our users daily. For a long time we've been pretending that supporting and including (non-free) firmware on Debian systems is not necessary. We don't want to have to provide (non-free) firmware to our users, and in an ideal world we wouldn't need to. However, it's very clearly no longer a sensible path when trying to support lots of common current hardware.

    Background - why has (non-free) firmware become an issue?

    Firmware is the low-level software that's designed to make hardware devices work. Firmware is tightly coupled to the hardware, exposing its features, providing higher-level functionality and interfaces for other software to use. For a variety of reasons, it's typically not Free Software.

    For Debian's purposes, we typically separate firmware from software by considering where the code executes (does it run on a separate processor? Is it visible to the host OS?) but it can be difficult to define a single reliable dividing line here. Consider the Intel/AMD CPU microcode packages, or the U-Boot firmware packages as examples.

    In times past, all necessary firmware would normally be included directly in devices / expansion cards by their vendors. Over time, however, it has become more and more attractive (and therefore more common) for device manufacturers to not include complete firmware on all devices. Instead, some devices just embed a very simple set of firmware that allows for upload of a more complete firmware "blob" into memory. Device drivers are then expected to provide that blob during device initialisation.

    There are a couple of key drivers for this change:

    • Cost: it's typically cheaper to fit smaller flash memory (or no flash at all) onto a device. The cost difference may seem small in many cases, but reducing the bill of materials (BOM) even by a few cents can make a substantial difference to the economics of a product. For most vendors, they will have to implement device drivers anyway and it's not difficult to include firmware in that driver.

    • Flexibility: it's much easier to change the behaviour of a device by simply changing to a different blob. This can potentially cover lots of different use cases:

      • separating deadlines for hardware and software in manufacturing (drivers and firmware can be written and shipped later);
      • bug fixes and security updates (e.g. CPU microcode changes);
      • changing configuration of a device for different users or products (e.g. potentially different firmware to enable different frequencies on a radio product);
      • changing fundamental device operation (e.g. switching between RAID and JBOD functionality on a disk controller).

    Due to these reasons, more and more devices in a typical computer now need firmware to be uploaded at runtime for them to function correctly. This has grown:

    • Going back 10 years or so, most computers only needed firmware uploads to make WiFi hardware work.

    • A growing number of wired network adapters now demand firmware uploads. Some will work in a limited way but depend on extra firmware to allow advanced features like TCP segmentation offload (TSO). Others will refuse to work at all without a firmware upload.

    • More and more graphics adapters now also want firmware uploads to provide any non-basic functions. A simple basic (S)VGA-compatible framebuffer is not enough for most users these days; modern desktops expect 3D acceleration, and a lot of current hardware will not provide that without extra firmware.

    • Current generations of common Intel-based laptops also need firmware uploads to make audio work (see the firmware-sof-signed package).

    At the beginning of this timeline, a typical Debian user would be able to use almost all of their computer's hardware without needing any firmware blobs. It might have been inconvenient to not be able to use the WiFi, but most laptops had wired ethernet anyway. The WiFi could always be enabled and configured after installation.

    Today, a user with a new laptop from most vendors will struggle to use it at all with our firmware-free Debian installation media. Modern laptops normally don't come with wired ethernet now. There won't be any usable graphics on the laptop's screen. A visually-impaired user won't get any audio prompts. These experiences are not acceptable, by any measure. There are new computers still available for purchase today which don't need firmware to be uploaded, but they are growing less and less common.

    Current state of firmware in Debian

    For clarity: obviously not all devices need extra firmware uploading like this. There are many devices that depend on firmware for operation, but we never have to think about them in normal circumstances. The code is not likely to be Free Software, but it's not something that we in Debian must spend our time on as we're not distributing that code ourselves. Our problems come when our user needs extra firmware to make their computer work, and they need/expect us to provide it.

    We have a small set of Free firmware binaries included in Debian main, and these are included on our installation and live media. This is great - we all love Free Software and this works.

    However, there are many more firmware binaries that are not Free. If we are legally able to redistribute those binaries, we package them up and include them in the non-free section of the archive. As Free Software developers, we don't like providing or supporting non-free software for our users, but we acknowledge that it's sometimes a necessary thing for them. This tension is acknowledged in the Debian Free Software Guidelines.

    This tension extends to our installation and live media. As non-free is officially not considered part of Debian, our official media cannot include anything from non-free. This has been a deliberate policy for many years. Instead, we have for some time been building a limited parallel set of "unofficial non-free" images which include non-free firmware. These non-free images are produced by the same software that we use for the official images, and by the same team.

    There are a number of issues here that make developers and users unhappy:

    1. Building, testing and publishing two sets of images takes more effort.
    2. We don't really want to be providing non-free images at all, from a philosophy point of view. So we mainly promote and advertise the preferred official free images. That can be a cause of confusion for users. We do link to the non-free images in various places, but they're not so easy to find.
    3. Using non-free installation media will cause more installations to use non-free software by default. That's not a great story for us, and we may end up with more of our users using non-free software and believing that it's all part of Debian.
    4. A number of users and developers complain that we're wasting their time by publishing official images that are just not useful for a lot (a majority?) of users.

    We should do better than this.

    Options

    The status quo is a mess, and I believe we can and should do things differently.

    I see several possible options that the images team can choose from here. However, several of these options could undermine the principles of Debian. We don't want to make fundamental changes like that without the clear backing of the wider project. That's why I'm writing this...

    1. Keep the existing setup. It's horrible, but maybe it's the best we can do? (I hope not!)

    2. We could just stop providing the non-free unofficial images altogether. That's not really a promising route to follow - we'd be making it even harder for users to install our software. While ideologically pure, it's not going to advance the cause of Free Software.

    3. We could stop pretending that the non-free images are unofficial, and maybe move them alongside the normal free images so they're published together. This would make them easier to find for people that need them, but is likely to cause users to question why we still make any images without firmware if they're otherwise identical.

    4. The images team technically could simply include non-free into the official images, and add firmware packages to the input lists for those images. However, that would still leave us with problem 3 from above (non-free generally enabled on most installations).

    5. We could split out the non-free firmware packages into a new non-free-firmware component in the archive, and allow a specific exception only to allow inclusion of those packages on our official media. We would then generate only one set of official media, including those non-free firmware packages.

      (We've already seen various suggestions in recent years to split up the non-free component of the archive like this, for example into non-free-firmware, non-free-doc, non-free-drivers, etc. Disagreement (bike-shedding?) about the split caused us to not make any progress on this. I believe this project should be picked up and completed. We don't have to make a perfect solution here immediately, just something that works well enough for our needs today. We can always tweak and improve the setup incrementally if that's needed.)

    These are the most likely possible options, in my opinion. If you have a better suggestion, please let us know!

    I'd like to take this set of options to a GR, and do it soon. I want to get a clear decision from the wider Debian project as to how to organise firmware and installation images. If we do end up changing how we do things, I want a clear mandate from the project to do that.

    My preference, and rationale

    Mainly, I want to see how the project as a whole feels here - this is a big issue that we're overdue solving.

    What would I choose to do? My personal preference would be to go with option 5: split the non-free firmware into a special new component and include that on official media.

    Does that make me a sellout? I don't think so. I've been passionately supporting and developing Free Software for more than half my life. My philosophy here has not changed. However, this is a complex and nuanced situation. I firmly believe that sharing software freedom with our users comes with a responsibility to also make our software useful. If users can't easily install and use Debian, that helps nobody.

    By splitting things out here, we would enable users to install and use Debian on their hardware, without promoting/pushing higher-level non-free software in general. I think that's a reasonable compromise. This is simply a change to recognise that hardware requirements have moved on over the years.

    Further work

    If we do go with the changes in option 5, there are other things we could do here for better control of and information about non-free firmware:

    1. Along with adding non-free firmware onto media, when the installer (or live image) runs, we should make it clear exactly which firmware packages have been used/installed to support detected hardware. We could link to docs about each, and maybe also to projects working on Free re-implementations.

    2. Add an option at boot to explicitly disable the use of the non-free firmware packages, so that users can choose to avoid them.

    Acknowledgements

    Thanks to people who reviewed earlier versions of this document and/or made suggestions for improvement, in particular:

    • Cyril Brulebois
    • Matthew Garrett
    • David Leggett
    • Martin Michlmayr
    • Andy Simpkins
    • Neil Williams

    01:24 :: # :: /debian/issues :: 44 comments

    Comments

    Re: Firmware - what are we going to do about it?
    Shockwave wrote on Tue, 19 Jul 2022 22:21

    If only it were that simple, installing non-free firmware being made effortless is indeed a problem, if it has backdoor functionality, or does anything shady, which is usually the trend, but let's face the facts, ivy bridge with intel me disabled is a perfect example of the FSF being illogical... The only difference in libreboot vs osboot or heads, including if its a fork of heads by nitrokey developers, especially, I might add is that libreboot is honestly, less secure due to pointless viewpoints.

    No hardware will ever be fully free by default and actually be usable in anyway shape or form.

    As for software, this is also very hard, in fact, like her or not, the lead developer of libreboot seems to be getting a similar thought process:

    https://libreboot.org/faq.html#does-libreboot-make-my-machine-100-free

    She also says something similar on a wiki via osboot.org as well, albeit, more in-depht, explaining all the issues with RYF, etc...

    If someone says, DRM-Free Hardware is needed, this is the real issue! Same with DRM-Free Software

    Some, like myself, would go even further in saying, even this isn't enough though!

    I say this, because of my irritation with bloated over engineered crap like dbus, systemd, pulseaudio, wayland and its components, avahi, openssl, etc...

    Btw, as for why openssl, is not great, compare it to LibreSSL, you will figure out why openssl, is garbage by comparison alot quicker.

    Alot of linux frameworks have gotten bloated due to foolish ideas, from "corporations" and "governments"

    I put quotes, because these groups, rarely have security and especially privacy in mind when they contribute to most projects in the free software world.

    I have gotten to the point where, it almost seems like OpenBSD has a better stance on security then most distros, due to the number of unbelieveably bleeped up software ideas being added to things as a mandatory default unless you modify stuff and make your own fork.

    Bluetooth = insecurity hell

    I could go way beyond that and just go endless on and on, suffice to say, libre software is good, libre hardware is good, but if it still has poor security implementations, its hardly a big leg up in improvement, if enough people in the malicious part of the hacker world get smart enough, to figure out how to screw stuff up.

    Granted distros haven't gotten there yet, but man... the more overengineered crap added, the sooner or later it will happen.

    So I understand what you say, but it is sometimes irrelevant under certain situations.

    Also, education helps...

    If you explain the problems with a non-excessive amount of words aka, why the blob is a problem for any operating system, no matter how secure and say, if you want this to be installed, add the non-free lists, including contrib by changing the repo.

    Obviously, the ISO would have to have a button to press to do this with, a 3 key combination code, such as alt shift end or something like that...

    And then of course, if they add it, make sure you warn them one last time and if they still want it, its better to just add it.

    libre software, or for those who prefer, open source, etc... The reason people are stuck on proprietary garbage operating systems is for this reason.

    Which is worse, people refusing to try for some holier than now reason? or allowing them to use this and more people ditching proprietary software?

    Think it over...

    Also, be aware,


    Reply

    Your Comment

     
    Name:
    URL/Email: [http://... or mailto:you@wherever] (optional)
    Title: (optional)
    Comment:
    Anti-spam:Select the first of the following words and enter it in the "Human" box
    icicle involves ivy incense insane indeed iterates impaled incenses inflame
    Human:
    Save my Name and URL/Email for next time