Introducing Ferrilab

Published on

Estimated reading time: .

I finally came up with a name I liked for the greater bitvec project collection, and several months later, a logo that I don’t hate. Here they are!

I’ve never really liked the name bitvec. I picked it because at the time I started, the only other major crate in this area was bit-vec and I figured since I was hoping to supplant it, I should be a near neighbor. I should’ve gone with bv, and ever since somebody else started using it, I’ve regretted not migrating over. But at least the name is pronounceable, and allows for neat puns (the project Twitter handle is @bitvecto_rs), and I owned the domain for a year before it expired and I didn’t muster the energy to renew it.

But there’s more to the project than just making bits individually addressable. bitvec directly spawned funty, because I wanted to generalize over the integer primitives, and subsumed radium, because my users asked me to generalize over the mechanisms of shared mutability, and neither of those projects really fit under the name.

What all three crates do have in common, though, is that they experiment with redefinitions of the Rust standard library. You might even say that they redefine the standard … data model … present in Rust programs. You might even call it just the Standard Model, with more capital letters and fewer words.

So over Thanksgiving 2022, I was talking to my friend Manish about wanting to improve the name of the group, and how I was leaning into the early 20th century physics direction because, well:

We drifted through some names of physicists from that era: maybe Pauli, after the exclusion principle? Bohr? Manish came out of the gate swinging with Fermi, which took a couple minutes to really sink into my brain, but when it did, I realized how incredibly perfect it is.

Enrico Fermi created the first artificial nuclear reactor, the Chicago Pile, underneath the University of Chicago campus. He was then relocated to Los Alamos, New Mexico, when his work was, shall we say, “directly overtaken by the federal government”.

Similarly, I grew up in the Great Lakes region, and then moved from the university to federal applied research in the Rockies – I began bitvec during my second stint working at Kirtland AFB in Albuquerque, as a subcontractor to the Air Force Research Laboratory there. Through a confluence of project timelines and management uncertainty, bitvec was even technically federally funded for a few months (my company didn’t know what else to do with me, and so I was given leave to pursue my own education as long as I could demonstrate relevance).

The pieces were snapping into place in my mind. My journey and the circumstances of bitvec’s creation matched up pretty well. The aggregate work all fit the allegory. And lastly, the keystone joke that bound everything together and confirmed that Manish was absolutely right:

The mascot of the Rust programming language and its community is named Ferris.

The off-campus site in Chicago is named Fermilab. By changing exactly one letter, I created the perfect name for what I’m doing: Ferrilab.

But my logo was still the ASCII representation of my name, put through a fisheye lens and dropped inside the Rust chainring using MSPaint (well, technically, Paint.NET). I spitballed maybe putting some electron orbital paths around the chainring, à la the Electron framework, but I never got around to actually doing anything in this direction.

I’ve been interested in writing my own SVG for a few years now. The logo for my website (visible in the favicon or anything under /oeuvre) is a drawing I made in late 2013 and rebuilt in SVG in 2021. This winter, I finally learned how to make a two-dimensional color gradient in polar space, which was just about the hardest thing I’ve ever done graphically, and figured that if I managed that, I could probably sketch a tolerable logo for Ferrilab.

So, naturally, I started out by building a chainring from scratch. The last time I tried to build a Rust logo was in 2020, and the only asset I could find at the time was a very unsuitable SVG that had been exported from Inkscape. So I didn’t bother looking around to see if anyone else had written the Rust logo in SVG, and did it myself.

My first attempt wasn’t quite there. I made a couple passes at the outer teeth of the chainring, and because I have two-thirds of a mechanical engineering degree, I decided I wanted to write a symbol that actually looked like it could drive a chain, not another gear.

You don’t care about that. The point is, the Rust logo’s triangular cogs are for gears, not sprockets, so I drew scalloped cogs that match what you actually see on bicycles.

It looked stupid, and the instant I posted my logo template on /r/rust, somebody replied saying that very recently, Mara had actually written a usable version of the Rust chainring that matched (and fixed) the original. So I threw mine out and pulled in hers.

The interior of the logo – the part that said this is Ferrilab, not just a generic written-in-Rust project – was harder. This required actual imagination, not just cribbing off somebody else’s work.

After a couple discarded drafts, I settled on what you see now: a modified voltage transformer symbol, underneath an initialism of each of the three crates. The fact that Funty, Radium, and Bitvec are also three of the four consonants in Ferrilab is a complete coïncidence, but not one I care to turn down.

Nobody seems to know what font the big R in the Rust logo is, so I just looked through slab serif fonts until I found one I liked. In another incredibly fortuitous coïncidence, the one that caught my eye was called Ferro Rosso – Italian for “Red Iron”. How could I possibly pass up that name?

Unfortunately, SVG only respects CSS @font-face rules when it is pasted directly into an HTML document; as the source of an <img> or <picture> element, no external resource loading occurs. So rather than force you to install this font just to look at my picture, I have to export a collection of PNGs from 16x16 up to 2048x2048. And while PNG supports transparency, it doesn’t support programmatic color changes, such as using a white gear when the background is dark. Rather than ask your browser to invert the image colors, I just added a near-white background layer. The end result is what you’re seeing here:

the Ferrilab logo

The blue divider line is just because I like blue; I used a voltage transformer because the Ferrilab crates exchange raw capability for precise expressiveness, colored Aeronautical Orange (#ff4f00). I considered using Safety Orange (#ff7900), but I thought it was too bright on a white background.

Can’t win everything.