joey castillo's personal website

On Language and Unifont

Originally published on Patreon.

The Open Book would not exist but for many people’s contributions to many open source hardware and software projects. The board, for example, owes a tremendous debt to Adafruit’s brilliant open source boards; many functional blocks either are borrowed or drew great inspiration from their schematics. Similarly, while the book’s custom e-paper driving software is cool, I didn’t come up with it alone; I built on Adafruit’s EPD library, Ben Krasnow’s notes on refresh waveforms and public domain code from Waveshare. The Feather standard. CircuitPython and Micropython before it. The list goes on and on. 

Still, the book owes one debt in particular to one open source project that I don’t think I’ve called out prominently enough thus far. That project is GNU Unifont.

To understand Unifont, you have to first understand Unicode. If you’re not familiar with it, here’s the one sentence pitch: it’s an attempt to unify all the world’s writing systems, ancient and modern, past, present and future, into a single universal character encoding. 

If that’s not ambitious enough for you: GNU Unifont is an attempt to create one universal bitmap font, with a glyph for every single character in this universal character encoding. Roman Czyborra, the project’s originator, put it simply in his 1998 introduction to the project, back when Unifont “only” had a few thousand glyphs: 

Unicode is obviously too big and tiring for one or two persons to design a whole font for. Besides that, nobody is an expert in all the world’s scripts so that it seems very natural to have people from all over the world to work on the parts they need in everyday use and they are most familiar with and merge their results.

I wrote in my project README that I wanted people to use this device to read books in all the languages of the world. The only reason I get to make an ambitious statement like that, is that many dedicated people spent the last twenty years doing exactly that.

I call my Unicode support library “Babel” (for obvious reasons), and there’s some fun computer sciencey bits about how the book gets good performance out of its library of 68,763 glyphs without caching. (spoiler: lots of bitmasks and lookup tables.) But that’s not what I’m most interested in talking about. Mostly I want to talk about Unifont and the importance of universal language support, why for me it’s the sine qua non of this whole thing. 

It’s a bit of a truism to say that language and culture are deeply linked, so sure, it’s not surprising that a device that aspires to display cultural works would aspire to support many languages. But it’s more than that. Throughout history, attacking language has been a tool for erasing culture. Often this was explicit and overt, like the Native American boarding schools that forbade students from speaking their native tongues. Being denied your language robs you of dignity. It erases identity. It’s forgetting.

On the other hand, seeing your language acknowledged and being treated as worthy of inclusion? That, to me, feels empowering. This is not something that technology has always done well. How many apps work well for English names, but balk at something as simple as José? How many design programs lay out left-to-right scripts with ease, but start acting strange when asked to lay out Arabic or Hebrew? Does your computer deem the Osage language (𐓏𐒰𐓓𐒰𐓓𐒷 𐒻𐒷) worthy of inclusion?

Last weekend, I saw a Cherokee writer give a talk in which she mentioned the link between tribal language and world view; the idea that the Cherokee language is a crucial link to a way of life that’s been under attack for centuries. It’s a deeply endangered language today; by some estimates, only a few thousand Cherokee speakers remain. One dialect is extinct. 

As of last year, coordinated efforts are underway to save the Cherokee language. Technology can help that effort with its support, or harm that effort through indifference. And in encoding code points for the Cherokee Language, and drawing glyphs to represent it, Unicode and Unifont support them. Projects like that, to me, represent the best that technology can aspire to. It shows the good that can come when we focus on universal access over bells and whistles; when we focus on empowering every user, instead of checking off every feature.

Because they did the work, the Open Book will support the Cherokee language, along with all the others. Which is all by way of saying, I’m deeply thankful that GNU Unifont exists, and I’m proud to have it as the indispensable font of the book.