Open Source Needs FPGAs; FPGAs Need an On-ramp

Though Open Source Software has won its biggest battles on servers, it first took off on "personal" computers - those comfortable machines that we interact with every day. And in the shine of the former's success, it's easy to overlook that we're losing the war for the latter.

Since the days of Linus Torvalds hacking on his home 386, the computers closest to us have changed form significantly: first laptops became much more prevalent, then touch-screen devices; and with each shift it took us further away from IBM-style open architecture.

This is the era of system-on-chips with NDAed documentation, encrypted bootloaders, and manufacturer-exclusive peripherals. Even when it's possible - and legal - to support these new devices, the sheer number and short lifespan of them spreads the resources of the open source community thin.

Many attempts have been made to create fully (or mostly) open-hardware phones, laptops, et al., but so far none have really caught on. The economics are plain: there's a limited audience of people who find freedom so important that they're willing to buy "more open" clones of existing architectures, and they're not numerous enough to support the production costs.

I'd like to argue, though, that perhaps another door is open, one that could change the dynamics of open-hardware personal computing.

The Problem

Open source projects die from diffusion. If there's not enough contributors concentrated in one place, code rots, bugs persist, and projects get abandoned. In contrast, where lots of traffic is concentrated in a relatively small bundle of code paths, the virtuous feedback loops kick in.

With that in mind, consider this: 59% of the lines of code in the FreeBSD kernel are for ethernet drivers. That's 71 drivers, covering 800+ devices, comprised of 800,000+ lines of code.

The driver I'm using to post this to the Internet is 8,000 lines, including those shared with the other drivers. Yes, buried in those 800k lines is some cool ethernet features used by the hard-core networking folk, but nonetheless the scale of the redundancy is unmistakable.

The business of proprietary chips drives towards product differentiation, and that results in deliberate incompatibilities, churn for churn's sake, and secrecy - even though none of these things result in a better product for the end user. And in order to remain relevant, the open source community has had to chase after every new load of chips like seagulls after a garbage truck.

Perhaps worse is the fact that the number of bugs more-or-less scales with lines of code. How many people have tried to install an open source OS and gave up after hours of intense frustration just trying to get a simple thing like a soundcard to work, or a fan to not run at full speed all the time, or control of the LCD backlight brightness. How many people who used to use OSS operating systems have given up because it's so hard to find a laptop that "just works"? How much smaller is the open-source user base today because of these frustrations?

Proprietary hardware has cost the open source community greatly, and continues to do so. It's a problem worth fixing.

A (Possible) Solution

With enough concentration of interest from developers, Open Source has proven a more than even match for even the largest companies in the world; but it only works in an environment of zero-cost copying, and making microchips is anything but.

For this reason I don't think that open copies of commercial products will work as a strategy. While the device churn has been very harmful to OSS, it's also improved the hardware. Even if the fundraising was successful for creating an open chipset for, let's say, a laptop, the game of keep-up isn't winnable. Hardware is still evolving: sound hasn't changed in decades but, say, wireless certainly has.

Here's what I imagine instead: a powerful but bare-bones RISC-V CPU attached to (in place of its southbridge) a large FPGA that's in turn surrounded by commodity "digital to analog and back converters" (i.e. CODECs) for handling the various analog characteristics of wired and wireless physical protocols.

This addresses the zero-cost sharing problem: it costs nothing to copy HDL source and bitcode for FPGAs. The idea is to push the "software" terrain that OSS needs to survive out to the very margins.

FreeBSD has 71 ethernet drivers, but take one step away from proprietary chips into the purely software world - the tcp/ip stack - and you see that FreeBSD only has 1, wonderfully bug-free, implementation. There's a world where all of our drivers can be that way as well.

This kind of standardization could concentrate the open source community's limited coding and financial resources, perhaps enough for community-controlled hardware to emerge. Instead of hundreds of new undocumented devices a year, efforts could be funnelled into a small number of compatible platforms where a fixed subset of physical hardware can stay constant for decades.

There would still be compatibility considerations, of course: the nature and number of the CODECs will vary from device to device, for instance. But it has comparatively tiny "surface area". Consider that the physical (analog) specification for USB has changed, in a backwards compatible way, four times since 1996. In that time there have been thousands of incompatible hardware implementations of its digital side.

Hardware that is open in this way would not only be solidly supported by OSS OSes out of the box, it would also become a platform for the same kind of innovation that we've seen in the open software world. That, I believe, could make it more than just a "more open" clone.

Which raises the question: if FPGAs are so great, why hasn't this happened already?

The trouble with FPGAs

The processor/FPGA aspect of my fantasy computer is starting to happen already: Bunnie Huang's Novena is an awesome step in the right direction, and projects like LowRISC will start filling in the still-proprietary gaps.

FPGAs themselves, while they used to be expensive and under-performing, are now sufficient for basic devices. There's a complete gigabit ethernet design on OpenCores that takes up 8% of a $10 FPGA chip, for example.

At this point I think the largest problem is cultural. People often don't realize how important it was to OSS that it was preceded by decades of easy access to programming tools and resources meant for absolute beginners.

When computers first became a power available to ordinary people in the late 1970s, you had a usable programming environment a split second after you turned the machine on, and the supporting educational books were written for people who had never used any kind of computer before. That combination of instant access to dev tools and a friendly step up was hugely powerful.

In contrast, FPGA development has always been an industrial activity, dominated by brutalist, opaque, and proprietary tools. There are open source tools and communities, and I don't want to diminish their significant achievements, but there is simply no comparison between the ease of jumping into open source programming versus open source chip design.

OSS needs FPGAs, and FPGAs need what programming had back in the 1980s: an on-ramp. A place where people can get up to speed in a friendly environment explicitly designed for that purpose.

Building Downward

I don't want this blog post to be an advertisement for the site (believe it or not), but I would like to mention that today marks the launch of at least one effort to make exactly that kind of on-ramp: Blinklight.

It doesn't matter how it happens, though, so long as gets started somehow. Open Source has completely changed the IT industry, and has grown beyond the point where it should need to survive off proprietary hardware leftovers. It's been enormously costly to be caught up in the churn, and an opportunity to escape has arrived at the same time that it's becoming impossible to have fully open source drivers for new devices. We can, and need, to stand on our own two (electronic) feet.

I don't want to undersell the challenges, though. Creating hardware is expensive, and it's an open question whether there'd be enough of a market. And while most of the fundamental peripherals like USB controllers, display drivers, and sound cards are already Open Source and running on FPGAs, there is much more that still needs building and integrating.

But the promise of having our own country, so to speak, is tremendous. The hardware needs of the open source community are not the needs of the average consumer, and they are diverging with every year. Having a "it just works", rock-solid, but still cutting-edge place to do your everyday computing is, to me, both tremendously exciting, and also our best chance at avoiding a generation of open source people living their digital lives inside closed platforms.

Perhaps the tides of proprietary hardware are too big to be fought by such a relatively small community, but nonetheless I think the dice are being rolled again, and this time openness might win - if we start building.

by Heath Johns, on 2017-03-31
licensed CC0
Back to the main site →