The Changelog: Software Development, Open Source - The intersection of coding and fonts (Interview)
Episode Date: July 3, 2020A listener request led us to Nikita Prokopov and FiraCode, and we're sure glad they did. When we think of open source software, fonts aren't usually high on the list of things that need maintaining. T...hat's not true when your font also supports hundreds of programming ligatures like FiraCode does. Nikita has his hands full!
Transcript
Discussion (0)
It just looks better.
It's not game changer at all.
Right.
You will not write better code with it.
Dang it.
Looking for wins.
I'm not advocating that is must have,
but it's just nice to have.
I don't know why.
Why would you want to look at simpler,
not beautiful, broken glyphs?
Right.
Not aligned properly.
When you can be looking at the same thing,
but rendered much nicer.
Being With Your Change log is provided by Fastly.
Learn more at fastly.com.
We move fast and fix things here at changelog because of Rollbar.
Check them out at rollbar.com.
And we're hosted on Linode cloud servers.
Head to linode.com slash changelog. Welcome friends.
You're listening to The Change Log, a podcast featuring the hackers, the leaders, and the
innovators of the software world.
On this episode, Adam and I welcome Nikita Prokopov into our Maintainer Spotlight.
Maintainer Spotlight is co-produced by Change Log and Tidelift.
Tidelift is the first managed open source subscription
helping you develop apps with components that just work,
including comprehensive security updates,
active maintenance, and accurate licensing.
And the best part of all, with a Tidelift subscription,
you help open source maintainers get paid for their work.
Learn more at Tidelift.com.
So we're here with Nikita, who is the author of feara code a free monospace font with programming ligatures this is maintainer spotlight we would like to thank ollie for pointing us to
nikita and feara code and ollie said as a fearCode user and repo lurker,
aren't we all a repo lurker of somebody's repo?
He said,
I've been impressed by Nikita's flexibility
and consistently patient conduct on a pretty busy repo.
I'd love to hear more about his broader thoughts
and perspectives on what seems to be a very popular project.
Programming fonts are an interesting collision of niches
I have not heard discussed on a podcast.
So I agree with that.
I don't think we've ever talked specifically about fonts.
Maybe font awesome, something like that.
But it's been a while.
It's been a while.
And for maintaining a spotlight, first of all,
Nahida, thanks for coming on the ChangeLog with us.
Sure, happy to be here.
So you live at the intersection of fonts and code, and I'm just curious how you got here
and why this was something you wanted to work on.
This is an interesting question.
So somehow I'm not only like I'm professionally, I am software engineer, but I've been always
interested in design as well.
And I've been reading about design design doing some logos and stuff like that
and as part of design I was also naturally interested in fonts and then yeah there was
this idea there was already a font with programming ligatures but they are it was called Haskell
but it was aiming at Haskell only so I figured why not create my own with the font that I like
and ligatures that I can use in the language I was working in. It turned out not to be too hard
and after the initial version yeah there was many other versions and I got more and more sucked
into the world of fonts how they're're built, and what details are there.
So yeah, I just started and then I get into fonts, I guess.
That's how it goes.
Sounds like a rabbit hole you can go a ways down.
I've always been on the fringe of fonts, reading people's blogs
who are interested in typography.
I've never quite known what makes a good font or why I like a certain one. Adam, you're keen on typography.
You're always talking about specific fonts you like and ones that you don't like. What's your
angle at this, Adam? I think I'm not keen. Oh, you're not? You have some taste about it though.
You care. Sure. I have some tastes. I'm not on the fringe or in the know of what's current.
Less so now.
But I think with monospace in particular, they're unique because they have to serve a certain purpose.
You know, readable, certain size, similar size.
They've got to fit into terminal windows.
And there's unique properties for monospace fonts in particular.
And, you know, you want to put some style in there, but yet it's a limited, it's a very constrained design pattern to design towards.
I like the fact that they're so creative and so diverse
given those constraints.
Yeah, things that I've always looked for in a monospace,
in a programming font specifically, of course, monospace is a necessity
because you need to line your code up, right?
Indentation and code alignment, these things are...
It matters, yeah.
They matter for readability and
so you have to have monospace so they all do have that but what i've always looked for in a font
for programming is disambiguity i want something where i know is is it a zero or a o is it a l
or a one not really a big problem if you're reading prose because your mind just kind of
can read it,
whether it's a zero or an O.
And contextually, it makes sense.
There's no zero in the middle of a word.
It's pretty clear, too, when you're reading text.
But in programming, there are zeros in the middle of words, right?
Like a variable name can have a zero in it or a one.
And if you think that's an L or a one, that's a huge difference, right?
Your code may not compile or in specific language,
maybe it just works just fine, but your variable ends up empty or nil or something. So those are
always things that I've looked for. Nikita, you surely have a lot of thoughts having built your
own font. We'll talk about ligatures here soon, because I think that's worth focusing on. But
what do you think makes a good programming font? Or what do you like in fonts in general certainly all the things that you mentioned
are important like uh yeah mostly it's uh zero oh uh and one l stuff like that i l and one yeah
these are things that must look different in the fonts but other than that it just i think it's a matter of taste and at some
point i was looking for perfect font but then like i found phyrra mono and build phyrra code out with
and i like the aesthetics of it like how the letters look and letter shapes themselves
but also later i discovered so maybe there is not a perfect font and like desktop wallpaper
you just have to change it once in a while
because it gets boring a little bit.
There's certainly high quality fonts
low quality fonts that look decent
that look terrible
but from high quality fonts
sometimes I just switch things
just to stay fresh.
Yeah, it definitely
is at a certain point an aspect of taste and our taste changes over time and we get bored of what
we're looking at for sure there's a a somewhat new trend in programming fonts especially amongst
people who share their screenshots of some code on social networks, which I'm curious what you guys think of this.
I'm still not sure where I land,
but it's where the comments are like serifed or curly
or even in some case,
the comment is like a completely separate font
and it's like scripty, I guess.
I don't know what the term is.
I'm not a font person.
Yeah, and so you have like the monospace
and maybe it's still monospace,
but it's just completely different style, and so you have the monospace, and maybe it's still monospace, but it's just a completely different style,
the comments, and then the code.
Have you seen that, Nikita?
What do you think about that?
Yeah, it's implemented as italics,
but yeah, there's very curly italics.
I think it's Victor Mono and Heffler something.
Yeah, there are two fonts like that.
I am not using those. I don't even use italics in my
coding at all and don't use bold fonts so i also have not only taste for fonts but or opinion
not only for font but or also for color scheme and i prefer all the text be the same font the
same width weight so no bold no italics itics, just the same letters over and over with some colors.
I think that italics and bold make actually text harder to read
because you have to switch.
When everything is in the same font and same weight,
it's just easier to read for me.
So yeah, I'm not using those.
I'm not using them either.
I tend to follow in with you.
I can see though for the social network aspect of
sharing code like that. There's a flair to it.
Yeah, I mean I can see why
separating and having a distinct style
and potentially even getting
and maybe that's just a thing for
being unique to make the comments
be more stylish. Right. But definitely
stand out. It kind of reminds me of the way that
TV sets are configured inside department stores
versus inside your house.
You go to a store and you have all these TVs,
these large screen, flat screen TVs,
and the brightness and the saturation
are all cranked to the max
because they're trying to catch your eye.
They're trying to stand out.
It's actually not the best picture
that that TV is capable of that you would actually want to watch you know like if you're watching a movie you would
not want those settings so you take it home and you have to actually you know configure it for
that environment and maybe this kind of flary fantastic curly comments with bright colors is
kind of like just catching attention on social media. I'm wondering if people that do that use that day-to-day in their regular coding
if it gets to become too much.
Because I sure think it would bother me over time.
Well, yeah, it'd be distracting.
Your eyes would be attracted to the comments more than the code.
Or you have to squint a little bit sometimes to read the comments
because they're curly or they're italicized.
I keep calling them curly, showing how lame I am.
Those kids and their curly comments.
I think
IntelliJ right now also
experimenting in the latest versions
of rendering
comments
in proportional
fonts, not monospaced, but proportional.
Because it's easier
to read and comments comments you usually read,
and not the code that you change.
I'm not sure how useful
that is, but there's
a lot of design space
for experimentation. You can do crazy
things with what you want
in each font.
And you mentioned the word high quality before, and I think the word high quality
kind of comes to play when you say how much
time and effort did someone put into the font itself to be represented in all these
different scenarios. So you can just go and design a font or put together a font and not put a lot
of time into it. And it's not so much that it's not high quality, but if you took all the effort
to provide the ligatures or the unique scenarios where there's contextual opportunities and stuff
like that like putting that time into a font or a typeface and that's even a debate there's like
is it a font is it a typeface but you know putting the high quality into it is really
a craft a lot of effort and a lot of painstaking time in most cases by one or many people to really make sure that this
typeface performs well in its desired
arena.
So Adam, you mentioned ligatures
and we haven't talked about that. That's a huge part
of Fiora code
is the ligatures
and I didn't even know what these were
a few months ago. I've seen them a few times now.
Here we are again. Now I get it.
I'm not sure if I would want it myself. I haven't tried it yet. I've just installed this this
morning and checking it out. I haven't lived with ligatures. But explain what those are to people
who aren't familiar with ligatures in your code. Sure. So the idea was that in traditional fonts,
there were certain letter combinations that was not rendered nicely together like if you have
f followed by i the dot of the i and the edge of the f would like overlap and it doesn't look nice
so they figured out that they will draw this pair separately and replace the combination with a
specifically drawn pair that like smooths a little bit this overlap. And this was in fonts like
forever. I think in metallic fonts this was used as well. It comes from like metallic fonts in like
real typography. And this was in computers as well, but it from metallic fonts in real typography.
And this was in computers as well, but it only was used for really rare combinations like FIFL,
FFI, stuff like that. And then,
I don't remember the name, but somebody figured out, the guy who built
Hasclick font, I guess, figured out that you can use the same technique,
but for programming stuff and if you think about like programming not not letter combinations but symbol combinations
like if for example in c or c plus plus you have dash followed by greater sign which kind of looks like an arrow but is not an arrow not an actual arrow and in
some phones normally these characters are not even supposed to stay next to each other so they're not
even aligned so dash is like minus between numbers and greater is also supposed to be between numbers
they're not supposed to stay next to each other. Yeah. So sometimes they
look not well together. So the idea was to find this combination, most popular ones, and replace
them with the same mechanism. But like with, for example, in case of C or C++ arrows, we actually
draw an arrow. It's a single glyph that looks like a decent beautiful arrow so that's the idea that
in the places where you're doing ice key art in your code like with arrows or plus plus or i don't
know for example in go you have colon followed by equals which is assignment operator right
stuff like that we just make them look slightly better together.
So it's basically optimizing these combinations for programming.
That's what it is.
Yeah, and as I browse Fiora code in my editor here,
it turns out you have to also turn on the ligatures explicitly.
So I thought I was looking at them, and I wasn't,
and then I turned them on inside. This is VS Code specific, but there's an actual the ligatures explicitly. So I thought I was looking at them and I wasn't, and then I turned them on inside.
This is VS Code specific,
but there's an actual font ligatures Boolean config.
In addition to setting FIRA code as the font,
you then can toggle whether or not you want the ligatures.
And with ligatures on, especially in Elixir,
one of the combinations that's popular in Elixir code
is the pipeline operator,
which is the pipe character
followed by greater than character.
And it's kind of like an arrow in that sense.
I'm sure you're well aware because it looks like you designed this ligature for that.
It looks like a triangle.
It does, it looks like a sideways triangle.
And so when I turned on font ligatures,
all of my pipe greater than combinations
all just switched to a to an actual triangle a right pointing triangle hard to describe in
voice but but there you have it so how many of these are there they're like
dozens are there hundreds of these combinations yeah i think there's hundreds. I think Fira code has around 100 or 150, something like that.
I have a script that generates them,
and I'm trying to remember the numbers.
I think it was something like that.
Quite a bit.
Yeah, but there is a lot.
There is a lot, yeah.
And regarding your mentioning that you have to turn them on,
this is actually another story here,
was when we started to building phones like that, it turned out that not every editor was ready for that.
So there was a story that almost nobody supported it except for web-based editors.
So in web, typography was designed properly for web pages,
and every editor built on top of electron
was also supporting them then the idea became popular and everybody started doing them but so
right now it's like at a different level of support in different editors sometimes you
have to turn them on sometimes enabled by default yeah but but yeah that's the thing
and worth noting if this is something that's new to you as a listener,
and this was new to me, and I was immediately turned off
because I thought, why are you replacing,
are you using special Unicode character?
Are you replacing my text with a Unicode character that represents it?
Because that I do not want.
I don't want to have maybe non-standard,
I guess if it's Unicode it is a standard.
But I want to have the actual thing as written.
And so it's worth noting that the way that you accomplish this
is basically like a presentation layer thing.
You're not replacing the underlying bytes, the characters.
You're actually just presenting them, correct?
Yeah, that's correct. That's the idea of it.
This is why it all works so beautifully,
because you can see beautiful Unicode-like,
it's not Unicode-like, but beautiful, specifically drawn shapes in your editor,
and your compiler still understands this as a plain ASCII character.
So yeah, there's no conflict there.
You just see it slightly better than it is in underlying Unicode inside.
You're going to have a divide there too.
You're going to have somebody who prefers
to literally see equals, equals,
two equal signs next to each other
versus an elongated equal sign
or whatever that might look like
in its ligature representation.
So you might even have somebody who's like a purist who's like,
no, I want to see the individual characters
and the visual representation doesn't matter to me.
And you're going to have some who are like Jared
that was immediately turned off because he thought you were replacing,
but you're not.
And then it really is just a visual.
So Jared, on the electric side, is that sideways triangle,
the visual representation to you,
will take some time, but do you think over time you'd appreciate it?
I'm not sure yet.
I guess it might take some time.
I literally just toggled it on, and I am kind of a curmudgeon.
I'm very happy.
I'm not unhappy with my fonts, my text scenario, my colors,
and I'm also not of much...
I don't get bored very easily in this way
that maybe others do.
Nikita, you mentioned that there's like a boredom
or something fresh.
I've been using Ubuntu Mono at the same size
with the same color scheme for probably,
well, maybe I've changed colors,
but definitely Ubuntu Mono for like a deck,
whenever they announced it, I just used that.
I liked it, I just used that.
And so actually
switching away from that to anything makes me a little bit like oh this is weird but i think you
know looking at these sideways triangles it's kind of cool i understand how aesthetically it's
it's kind of more interesting i know in your readme nikita you talk about how there's like
some sort of minor brain wins in terms of like cognitive overload with this maybe you can explain that from your perspective of why ligatures are actually like
just because they're slightly more representative of of the glyph or what yeah so idea is that if
you type two characters to build a single operator your brain has to like think of it as okay i see two
characters but it's actually part of the single thing yeah it's a single operator and if you just
see a triangle actual triangle without any gaps or it's just a single thing so it's easier for you
to like aha this is a single thing i like to think of it as it makes it closer to mathematical notation.
If you would write some, I don't know, equations on a paper
or in a well-typographically well-set paper,
you would use beautiful characters that look the way they're supposed to look
and if you're just typing code in ice key you're just trying to imitate that but you have like
less with very poor tools you cannot build like an arrow it just looks better it's not game changer
at all right i mean you will not write better code with it or
i'm not advocating that is must have but it's just nice to have i don't know why why would you want
to look at like simpler uh not beautiful broken glyphs right not aligned properly
when you can be looking at the same thing but rendered much nicer yeah i get it there's
there's maybe a nice comparison with emoji and emoticons so you know in the battle days when we
wanted to emote something we would put it when we wanted to wink at somebody we put a semicolon and
then a right brace bracket uh paren a right paren paren. Parenthesis. Yeah. Paren.
And that would be a winky face.
Then emoji came around, and now we have these very nice,
very expressive yellow or whatever, your color of choice, winky face.
The big win in that case is you don't have to turn your head sideways to actually see what you're trying to emote,
as the semicolon is necessarily at a 45 degree turn.
So that's a win.
And I think it's a similar argument here
where it's like,
and there might be a similar pushback.
Like I've used the semicolon paren for years,
even once emoji were out there.
And over time,
you just get used to the emoji
and you're like,
yeah, this is just better.
Why am I not just switching to that?
And eventually those pretty much
have gone by the wayside.
There's still people that put them in certain contexts,
especially when emoji is not supported.
But it's better, pretty much objectively,
to have a more expressive glyph that represents that thing
versus cobbling together a representation.
I can actually put it another way.
In a perfect world, if your language of choice would support Unicode arrows,
and you would have a decent way to type them in, also Unicode arrows,
you would probably use those.
Nobody would build an arrow from dash to then sign.
It's just an approximation, an unfortunate one, but it works.
It works easily, effortlessly.
So yeah, why not?
Yeah, we're using kind of a lowest common denominator solution
based on the availability of ASCII
in different languages or different areas.
And then also the fact that you just can't fit
all of those glyphs onto a keyboard,
unless you have specialized keyboards
that we know around the world.
There are keyboards that are wildly different
than the standard QWERTY keyboard,
especially for character-based languages and stuff.
You said the word if, and there's quite a big if here on the language-specific glyphs.
So JavaScript's got some HTML markdown, Java, C Sharp, Ruby, Go, Swift.
We mentioned Elixir, Kotlin, R.
So you've took some time pretty much down the swath of languages being used today
to give them special representation for certain things they're doing inside their syntax.
And that's really interesting.
And you even go beyond that to do things like in console UI.
And so you were just mentioning where would you use this.
I was thinking it would be super cool to have these kinds of things
whenever you're writing a CLI and something's happening
or you're doing some console stuff and you have an opportunity,
let's say like a module installation with NPM or something like that.
When something's happening, you can do some really cool
like power lines, squares, partial boxes, some really cool like lines squares partial boxes some really cool stuff really cool art with this
type of uh font typeface over say ubuntu mono where there's just not that opportunity yeah similar to
curl has that new spaceship yeah progress indicator you know where it's an equals equals equals with
the right arrow with the right greater than sign and that's like the ASCII version of like a rocket ship, you know?
But if you actually had a font like this that had accounted for rocket ship as
like a thing,
then that could just be translated on the fly into something that looks much
cooler, much more like an actual spaceship or rocket ship.
I'm curious.
It can be animated even.
I mean,
you can be swapping out characters behind the scenes and it becomes very animation-like.
Maybe. I was asking Nikita about that
because I'm not sure how these things are built.
How do you go about achieving this in a font?
Actually, the one that you mentioned with Progress Bar
is a really new feature.
It was released last month, Fira Code version 4.
Yeah, and this actually was a tricky one.
So the way Facode works or any
other font works so inside the font there is a small programming language that can you that let
you program like replacement and ligatures works through that it's basically pattern matching like
so for ligatures to just say if you see like for example dash and
their greater sign replace it with this glyph with this name this is simple stuff right but you
actually can do like more complex stuff and you can do like kind of loops or stuff like that so
the way it works for long arrows is that you start if you see a dash that is followed by a dash, you start converting the first dashes into a line.
And then this process goes on and on and it converts them as it goes.
And in the end, it just puts some ending arrow or something like that so yeah it's actually a little program inside the
font that can do well different things maybe some crazy things for the craziest one for now
from for fear code is long arrows you can have arrows of any lengths and you have any endings
you have can have like in the middle also have greater sign or like pipe or
stuff like that vertical line yeah i think there was also an article a few months back when a guy
built using the same open type features he built um number separators inside the font. For example, if you type a long number,
like six or nine digits,
it will automatically put commas or spaces
in between groups of three digits.
But it will do it on the font level.
It will be purely presentational,
just like ligatures are.
You can do stuff like that inside the font as well.
When you sat down and said, I want to design this font from scratch,
how did you begin?
What was the first step?
What was your blank canvas?
What was, say, the constraints you put on yourself?
What were some of the key things you were really shooting for?
Ligatures, obviously, we've been talking about that,
but what were the other aspects that really brought you into play to do this yeah so as i said when i started it was just
an experiment and there was has click font which was based on i think on source code pro
and had ligatures for haskell so i wanted the, but for the font that I liked at the moment, which was Fira Mono, and for ligatures, I guess for Clojure, because I was programming Clojure
and still programming Clojure, maybe. Yeah, so I just took Fira Mono, which has all the head,
or still has, all the letters, right? So I didn't draw any of the letters and just added ligatures on top of that. So it's in a sense, it's just an extension of Fira Mono.
Yeah, that's what I work with.
How do you accomplish that then?
Are you, you know, sort of iterating based on Fira Mono and you've got sort of the, like how a language might have a superset or a subset, or is it like that where you're sort of building on and you're sort of
in tandem with their development of that font?
You know, are you drawing
the vector versions
of all these characters
yourself by hand or do you use some sort of base
layer of work and
add it on too?
And is your work tied back to theirs and
has to sort of wait till they iterate
so you can iterate and add on? Are you still connected to the original fear mono to somehow yeah sure for the ligatures
yes i have to draw all the vector forms myself it helped a little bit that for example they already
had arrows like unicode arrows and i just like extended them a little bit so it's simple operation
but uh yeah some of them i had to draw from scratch so basically yeah it's you just open a
file which is a set of vector shapes you add new glyphs and you have to draw vector shape for
for those glyphs for example if i want an arrow i drew i draw an arrow it usually comes
in two weights like so you have to draw it for normal and for bold and then the soft software
interpolates for all the other weights and i left the letters from phiromo as they are. We fixed a little few bugs that they had in Kyrillix, I think,
or some rare languages, let's say that.
And yeah, so basically right now Fira code has letters from Fira Mono
a while back.
Luckily for me, I guess they're not iterating,
they're not changing Fira Monoona anymore so i don't have to keep
up it would be probably a pretty hard endeavor because if they say change metrics or something
like that i will have to adjust all my ligatures and i have just so so many of them so it would be
tricky but yeah it's it just let's say it has a snapshot of Fira Mono
from, I don't know, five or four years back.
And I am just building on top of that.
Every new version of Fira code
is just more and more ligatures.
With sometimes bugs fixed,
sometimes your Unicode characters,
sometimes something gets removed.
But yeah, it's basically
just adding slightly on top.
The Tidelift subscription is a managed open source subscription backed by project maintainers.
If you're building applications with open source, Tidelift helps you ensure you have
components that just work.
That includes comprehensive security updates, active maintenance, and accurate licensing.
Tidelift helps you speed up your development, save money, and reduce risk when building
apps with open source.
And the best part of all, with the Tidelift subscription,
you help open source maintainers like Nikita get paid for their work.
Learn more and get a demo today at Tidelift.com. Well, thankfully the source is out there for this stuff because, I mean, without it, you know, you'd be starting from scratch.
So there's a repo out there for Fierce Sands that's got Fierce Code, Fierce Mono, and Fierce Sands in there.
Some of them kind of dated in terms of their last commits to them.
So Fierce Code and FieriraMono being four years ago,
FiraSense being two years ago.
I mean, thankfully this is open source
that you can improve upon this work.
Yeah, so the biggest luck for me was that it was open source.
It was an open font license.
So anybody can build modifications
and distribute them freely
the work original work on philocense was done i think by rudolf carois or something like that i'm
not sure how to pronounce the name and eric speakerman they built it for firefox mobile
operating system i think it was called called Firefox OS or something like that.
So it was supposed to be the default font on Firefox OS.
But then Firefox OS didn't happen.
But the font already was built and it was openly distributed
and it had monospace.
And I was lucky just to have it.
After that, they tried to update it i think twice they they built
like i think the phyra sense that you mentioned from two years ago it's the first attempt then
they like formed different company and rebranded it as phyra phyra go and it's basically phyra
sense but like updated again so the the Fira Sense or Fira
Go is recently
newly updated.
Fira Mono wasn't really updated
since, I don't know,
four or five years back.
It doesn't get new versions
anymore. They did, though
at some point they released
a version called Fira
Code, which is just Fira Mono with different line height.
No ligatures, nothing at all.
They just chose this name for some reason.
I don't know.
I don't think anybody uses that.
And I think FiraCode was already very popular by then.
I asked them to change it.
They don't seem to respond.
So yeah, I don't think it matters much.
I'm not sure how popular Wikipedia is for people looking for the history on this,
but I assume it might be to some degree popular
because we use Wikipedia for history in some cases.
And so I would say that's where I was confused
because I saw a Fira code mentioned in the Fira Sans Wikipedia page.
It didn't seem like it was referencing anything in particular
because it didn't link to the proper place
because where I went didn't have anything representing Fira code.
However, we're obviously talking about Fira code here today.
So maybe do an edit on the Wikipedia page and point to yours
so we can have some clarity out there for anybody looking.
Yeah, maybe.
That sounds a good idea.
But I think in terms of Google search,
I think Fira code is fine.
I think it all leads to GitHub page,
the proper GitHub page,
my GitHub page.
It's also on Google fonts.
There is Fira code and Fira mona
and Fira code is my Fira code,
not that version.
It's all fine.
Is that something that you submit to?
Or did they come to you and say, can we put this on Google Fonts?
How did that work out?
I think I submitted it or somebody from FiraCode community submitted it.
There is actually a little story there.
So when I started FiraCode, they like Fira Sans and Fira Mono license.
They have like a phrase that we license the name Fira Sans and Fira Mono.
I'm okay.
I will just name my Fira code.
And it was fine for a while.
Then they changed it like we license Fira prefix and all fonts with Fira are ours.
And like, what the fuck, what do I do?
And because of that, it was like a few years,
they didn't want to take Fira codes to Google phones
because this question was, like, questionable.
And it was really hard to contact anybody from Firefox
or from the Bbox type, even just to look at that. They didn't
mind, they just don't have time to look.
After a while,
everything gets cleared up, they change
the license again.
After that, Google Fonts
was happy to take my font.
They actually do
also do some
job on it. It's not
like I submit my font to them they actually came to
my repository like wrote a bunch of scripts that like build phone properly and stuff like that
and only after that they host some version it's i think it's also not the version that i distribute
it's the version they built from my source interesting that's an interesting question
though jerry because I was thinking earlier,
like if the barrier to entry to,
you know, like he'd mentioned,
he's a programmer primarily,
but curious about design
and in particular fonts and typography.
And the next question is adoption.
So if you put something out there,
you've got to define all these installation instructions
and, you know, this and that.
But if you're using, say, Google Fonts,
and that's pretty
common, you can use that for desktop and the web. So it can be, in many ways, access to a large
population of people who font curious, and they want to try things out. So the way you get adoption
is by having distribution. I'm thinking like, how do you get distributed get distributed well it sounds kind of backwards
though because it seems like they should be working more closely with you to ensure that
your desires for it are fulfilled through google fonts and it seems like they're not exactly
collaborating with you they're just sort of using your source and doing their own thing with your
stuff which is totally fine licensed and legally and and whatever. No, no, no, no.
Maybe I put it wrong.
They do came and they did a bunch of fixes and cleanups
and a pull request,
and I merged everything in Fira code source.
So it's all in there.
But they also contributed build scripts.
And yeah, I don't know.
I just didn't have them.
I went into the Glyphs app and clicked export
and get a file from it.
They changed it to command line.
It's all fine.
We talked and we caused a couple of issues.
It was communication.
I misheard then.
So when you say they,
do you mean somebody that represents Google Fonts?
People that manage their library and et cetera?
Yes.
I think there was a person, a guy who was communicating with me.
And I feel like, yeah, I work with somebody.
I'm just trying to remember.
I think that he was called Steven Nixon or something like that.
If it's wrong, I'm sorry.
But yeah, it was a collaboration.
No, it's totally.
Well, just trying to figure out how it happened
because it's like, if somebody else out there is like you,
you know, what can they expect?
How does it work?
Yeah.
I think if you want to initiate that,
you can leave a request or issue in Google Fonts repo.
And then from that, you will know what to do i think
they will tell you what to do you also mentioned about distribution and i am not sure that google
fonts is like that perfect for distribution because uh there are lots of fonts and it's i
doubt you will just by putting your font on google fontss, which is useful, but it's not going to change everything.
It's not like getting on the front page of Hacker News
or something like that.
Maybe not.
The install process is pretty straightforward, though.
So once you get the critical mass and you get the awareness,
the next step, which is usage,
they've lowered the barrier to that at least.
So I don't have to i don't have
to think too hard if i'm using google fonts for desktop or whatever and it gets a little easier
saying just install yeah yeah certainly that's a cool open source success story you know you're
building on top of some open source of course there's always copyright and legal things that
happen here there and licensing it seems like everything's pretty much shook out and been good.
What about managing an open source community and project around a font?
Is it different than managing an open source around a code base?
Does it feel, I know you have some open source closure libraries and stuff too.
Does it feel like that?
Does it feel different?
Is it actively developed?
It sounds like you're working on the next version.
I would tend to think a font, you design it and it's done.
But I guess if you're adding ligatures all the time,
you could just do it until the end of time.
Does it feel like a coding project
or does it feel like a different thing altogether?
It certainly feels the same.
There are a couple of differences.
One is it's really hard to take pull requests on the font because the way font is built,
at least Fira code, it's built in proprietary software, Glyphs app, which is, I think,
it's kind of standard for font builders. There is FontLab and there is Glyphs app, which is, I think it's kind of standard for font builders.
There is FontLab and there is Glyphs apps.
I think they're the two most popular programs.
They're both very expensive.
So you would not buy them just to change a letter in a font
and submit a pull request.
Because of that, I have to do most of the changes myself.
So it's mostly issues and people request,
and I just implement them myself.
So that's different.
I would like to accept pull requests,
but I think because you have to buy this program
to design a font,
and also because I'm not sure how well the font file itself
will work with changes like patches, you know,
as you can do with source code.
I think it's not well optimized for patches.
It's a text format, but I think it's not good optimized.
I wish they used JSON.
It might be slightly better.
Yeah, there are some questionable things inside. I've looked inside the GlyphSub format
and there are some questionable things.
It's a software engineer.
Other than that, it's also my most popular project,
so I get much more requests for that
than for anything else.
But yeah, that's expected, I guess,
because of the popularity.
At some point, I guess, because of the popularity.
At some point, I found out that the only way to keep up with it is just as you get some requests, you have to deal with it immediately.
Otherwise, it will pile up and you find yourself under a huge pile of requests
that you have never taken time to answer.
So now every day, if I see a new issue, I reply immediately.
It might be, this sounds good, or this is, I will not implement that, or just two words,
just to get feedback to people immediately.
What's your process on issues then?
Because you've got 686 closed, 238 open, which seems like a lot.
So what makes you open or close an issue?
How do you handle issues?
Yeah, so sometimes it's just you need to explain something to a person.
Sometimes you have to just redirect them because many bugs are actually bugs in editors or terminals
or in syntax highlighting.
But people come to me with them
and I have to explain how it works and send them.
And so for feature requests, they just build up.
And at some point, right now I do it every month.
I just pick some that are certainly easy to implement
and I sit down for a day or two implementing them
and then release a new version of your account.
What makes you leave the issues open?
Do you just leave them open because there's more conversation happening?
What makes you click the close button when the issue is solved or you responded accurately and
you don't expect any more communication? What makes you keep this amount of issues open? Why
is that number so large? Obviously it's not your day job, so I'm not grilling you while you're not
doing your job. I'm just trying to figure out what is it that makes these issues stay open for you what's your philosophy on keeping them open yeah if the issue is not resolved like if i am certain i will never
implement it i close it because i won't want to implement right if i do implement it i close it
because it's done but if i am uncertain uh if there is like pros and cons
I might wait them
I just leave it open
I don't see problems
lots of open issues
it's just
okay maybe
at some point
I'll have time
I come back
and take another look
maybe something changes
and
I think in the last release
I closed some issues
from like
four years ago
or something like that
it's still possible I don't mind open issues and I don't see a problem with them the last release, I closed some issues from like four years ago or something like that.
It's still possible.
I don't mind open issues and I don't see a problem with them.
And here with some repositories, people, especially in big companies, I think, all the issues gets closed automatically.
I don't do that because I don't see the point.
It doesn't become less relevant because nobody takes a look at it for a year.
It's probably still an unsolved problem.
Gotcha.
Could you estimate the number of hours you put into this project?
No.
Thousands?
Hundreds?
Or is it a magnitude?
Is it 100 hours?
Is it 1,000?
Is it 10,000 hours? No, no, no. Thousands, hundreds? Or is it magnitude? Is it 100 hours? Is it 1,000? Is it 10,000 hours?
No, no, no, no.
I would say 100.
Yeah, 100 sounds like something realistic.
It's a very thin layer on top of my day job.
So it's like a day, a month, or something like that.
But it's been going for a while.
I don't know how old it is.
Like five years? More? Six years. It's like, I don't know how old it's like five years, more, six years.
It's a pretty long time.
Do you ever just want to put up the not maintained sign on the readme
and just say, I'm done with this?
Or are you still enjoying it?
Do you get a lot of value out of it personally?
Yeah, I still enjoy it.
And the issues just keep coming.
So I love it. I don't want to enjoy it. And the issues just keep coming. So I love it.
I don't want to close it.
It's actually unusual for font projects.
Usually fonts get done, not changed after.
So most of the fonts never change after the release.
So yeah, I guess it's unusual.
But then as a software project, it's not unusual.
It's typical. Software projects usually are never done. So yeah, I guess it's unusual. But then as a software project, it's not unusual. It's typical.
Software projects usually are never done.
And is that because you're adding ligatures?
Yeah, mostly because I'm adding ligatures.
So there are requests from people that come.
I think this might be a good idea.
And most of the time it is.
I don't know, half of the time it is, half of the time it's not.
So sometimes they just come with the idea.
Like in some languages, there are certainly sequences of glyphs that are operators,
but I just have no idea how to draw them.
Especially for Scala or R, there are like percent, greater than percent, for example.
How do you draw that?
So it makes sense.
I don't know.
Yeah.
There is no ligature for that.
I would love to put it, I just don't know how to draw it.
If we estimate eight hours as a day of work and you put in roughly a day per month and
you've been doing it for five years,
that's around 500 hours.
Five hundred.
Yeah.
If we base it on those numbers there,
if that's accurate,
then we've got about 500 hours into this project.
Okay.
Interesting.
Plus the mind space, you know,
which is a lot if you've got a day job and other activities and things that you're interested in.
It's a lot to handle.
And the reason why we do this show is not so much to say, oh, let's quantify your effort,
but more like, you know, there's a lot that goes into producing open source that goes
into maintaining open source to lead a community to do something like this with a labor of
love.
And it's less about quantifying that, more about just being clear with how much effort
it takes to be committed as you are and others are to open source.
Have you had a lot of support?
I noticed you have a Patreon.
Looks like you have some supporters.
You're trying to get to a certain amount of money to help you work on these things.
And I would say you've had some modest success there, but I'm how you would view that yeah i think it's pretty successful patreon it certainly helps a lot
especially the money for the license for glyphs app yeah and an annual license or a one-time
purchase i think it is one time. I'm not sure.
I just bought it actually because the first year when I started FearCode,
I asked the author of the Glyphs app if he can provide me with a license,
and he did.
Yeah, and I used it for a couple of years.
I used free license.
That certainly had to be renewed each year.
But then I set up a Patreon and it didn't seem fair,
so I just paid for the license from the Patreon money.
So I forgot the rest of the question.
I was asking about how you feel like the Patreon support is going,
if you're well-supported.
I think for the amount of work that I am doing,
it's pretty generous.
I also have other open source, which I would love to do more, like Clojure stuff.
It's currently under the same Patreon.
Maybe I should split it up at some point.
Sometimes it annoys people that donate for FearCode and get Clojure instead.
They donate for Clojure and get FearCode instead.
I guess it's not entirely fair but yeah i would certainly would love to do more like to the point like the full-time working on open source it's like the dream that i have but it's
not possible with the current amount of support but it's certainly helping, yeah. And I think the Fira code is
probably the most popular font
with ligatures for programming.
It also
warms my heart every time I see
Fira code in the wild.
For example, I'm at a conference and somebody
puts up slides and they use Fira code
and somebody knows
about it. It still feels
strange, but it's a good feeling.
What's the skew when it comes to your support?
I know you've got GitHub Sponsors going on,
which is really on the Tonski,
not so much your repositories,
which that's how it's designed,
or it could be organizational-based.
You've got Patreon, you've got PayPal.
Of the three that are available,
at least when you go to GitHub and you're on Fiora Code,
which one is sort of most popular?
Which one do you prefer?
What's the percentages across the three?
Patreon is certainly the biggest one.
Maybe because it was set up as the first
and when I announced it, most people went there.
The GitHub is probably 10 times smaller.
And PayPal is, I don't know, smaller, two, three times smaller than GitHub.
And also PayPal is one time seeing GitHub and Patreon is every month.
When it comes to this opportunity to sponsor you as an individual,
what is it that makes you like or dislike certain feature sets from them?
Let's say, what do you like most about GitHub sponsors?
Obviously, PayPal is not being used very much.
What's the skew between the two in terms of your preference,
in terms of how they do things and represent you as an individual creator, etc.?
I would say that the idea of Patreon is the best
because you can have posts,
you have extra material and stuff like that.
You can hide something for patrons only,
stuff like that, all the features.
On GitHub sponsors, I don't think you can do that.
You just give money and forget about it. You don't think you can do that you just like just you just give money and forget
about it you don't get anything in return so in terms of patreon it's probably the best i don't
like the ui of patreon it's i think it's terrible it's like everything is of the wrong size you can
never find anything stuff like that it's hard to write a post and stuff like that but
but the conceptually the idea is is better certainly yeah i'm not sure how well it works
though for software projects because maybe github better for software project or the same at least
because like you see um like patreon is more like for people who provide something tangible that you can
share. And software projects
especially open source,
what do you put on the Patreon
page? Backstage videos
of coding or what? I don't know.
It's just the code and the code
is already on GitHub. You get the code.
Right.
So if you could one for one replace your current
software engineer salary,
like exact same salary, but now you're full-time open source,
would you make that deal?
Yeah, absolutely.
And what do you think would materially change about your life
having switched over to full-time open source?
Have you thought through that?
What do you mean materially? Practically, like your day-to-day or your life like what would
change about your life having the same income but having this different career
i think that i will just become more calm because like i would work on things that i think are important and so it it gives like your
bigger peace of mind let's say right when you work for employer you're doing somebody else's ideas
and you have to also uh yeah basically that and also I think I work better on things that I believe in,
like deeply believe in, and I'm more invested, and I work better.
So, yeah, it's just, I guess it's the way I feel I work.
Yeah, that's it.
Well, that's all there on GitHub.
You can check it out.
Fira code.
It is amazing. I like it. I think it's got a on GitHub you can check it out it is amazing I like it
I think it's got a great flair to it
especially if you really appreciate the ligatures
if you're someone who really wants that visual aspect to it
or if you're going to do a console UI
or some of these unique ideas
Nikita is certainly dedicated towards it
he mentioned he's super passionate about it
and if you want to support it you can
so all the avenues are there
the links are in the show notes, so check that out.
But Nikita, thank you so much for your dedication
to this interesting font for programmers to use
and for your commitment to open source.
Thanks for coming on the show.
Thank you for having me.
We want to hear your thoughts on coding fonts in the episode's comments.
Just pop open the show notes, click the Discuss on Changelog News link, and let your voice be heard.
Or point your favorite browser to changelog.com slash 401 and click the Discuss link there in the play bar.
Thanks again to Tidelift for co-producing Maintainer Spotlight with us.
A big shout out to our longtime partners Fastly, Rollbar, and Linode,
to Breakmaster Cylinder for the awesome beats, and to you for listening. We appreciate your time
and your attention. Is there an open source maintainer in your life who deserves some time
in our spotlight? Let us know on changelog.com slash request. We love making shows for y'all.
That's all for now. We'll talk to you next time. boom goes the dynamite you are off the changelog hot seat i'm gonna leave the ligatures on for a
few days i want to commit to a week of just leaving it as it is configured right now.
And then I'll send you guys a tweet or a text
or whatever, an email.
And I'll let you know what I think after a week.
Because maybe I'll just turn out loving it
and I'll become your next big advocate.
Who knows?
Maybe I'll hate it and turn it off.
I don't know.
You certainly should give it a go.
And it's also another thing that I learned
like experimenting with fonts is the first
impression is usually wrong yeah you have to give it like at least a week otherwise you cannot judge
your first impression and it happened for me with a couple of fonts that i installed look at them
and no this is not cannot possibly work and then at some point i just tried them for a week and i had completely
different feeling like i i could accept it i just didn't understand it at the first glance so yeah
certainly give it a go i think that's probably true i think most of the time i do the initial
the hot take and move on or move back i'm like yeah i'm happy with ubuntu mono and i just go
back right away without you know it's kind of like, I don't know, you want to go live in this new place?
It's like, well, if I stayed there for a week, I would have a much better idea
versus just walking through it.
So I'm going to let it stick.
I think the ligatures is the biggest change.
I mean, the fonts, there are differences, but they're mostly stylistic.
The ligature is like a pretty, you know, like I was even typing like the pipe and the caret
and I delete the caret and see what happens,
you know, like the switch from a...
And so that's a different thing that I'm not used to,
but I'm definitely going to let it live
because maybe I'll end up being a ligature person after this.
Who knows?