The Changelog: Software Development, Open Source - The serenity of building your own OS (Interview)
Episode Date: August 24, 2023This week we're talking to Andreas Kling about SerenityOS and Ladybird. Andreas started SerenityOS as a means of therapy. It's self-described as a love letter to "'90s user interfaces with a custom Un...ix-like core." Andreas previously worked at Nokia and later at Apple on the WebKit team, so he had an itch to do something along the lines of a browser, and that's where Ladybird came from. We get into the details of compilers, OSs, browsers, web specifications, and the love of making software.
Transcript
Discussion (0)
what's up friends welcome back this week on the change law we're talking to andreas cling
about his work on serenity os and ladybird andreas started serenity os as a means of therapy
it is self-described as a love letter to 90s user interfaces and a custom unix light core
andreas previously worked at nokia and later at apple on the webkit team so he had an itch to Thanks for watching. A massive thank you to our friends and our partners at Fastly and Fly.
This podcast got you fast because Fastly is fast, super fast, globally.
Check them out at Fastly.com and our friends at Fly Help Us Putter app and our database close to you wherever you're at in the world with no ops.
And they'll do it for you, too.
Check them out at fly.io. What's up, friends?
I'm here with James Cowling, co-founder and CTO at Convex.
They're one of our new sponsors, and they're building a full-stack platform for the TypeScript era.
So, James, in your main navigation, you link to a page
called Convex versus Firebase. How similar is Convex to Firebase? And if someone is quickly
trying to grok what Convex is, is that a good comparison? I think it's a good starting point
for sure. I mean, Firebase has been very impactful. And the people we speak to who use Firebase often
love it. And they often lament the time they have to move off of Firebase because it's kind of failed to meet their needs as a growing company.
So Firebase falls short in a few ways.
One is in terms of like a fully relational document model.
One is in terms of having strong type system. One is in terms of having this full end-to-end consistency story where you write
functions that run on an API server on the data that you can subscribe to. And so one thing I
think we see in the Firebase style development model is that you have web applications talking
directly to a database in a cloud firestore. With Convex, what is different is you have your code
talking to actual fully fledged TypeScript functions running on your data that you can subscribe to.
But I think the Firebase's comparison is fairly apt.
And if someone is a Firebase user, I think you will love Convex.
And it's certainly designed to fill that niche in the market.
It's people who want to build applications without having to mess with infrastructure.
In what way has infrastructure failed specifically application developers?
I think if one was to compare what it looked like to build an application 10 plus years ago to today, it's gotten more complex, not less complex.
There's a bewildering amount of frameworks.
I think Google, for all their amazing work they do, has had a bad influence on how people build systems.
Because oftentimes when someone wants to build a web app these days, they're told to like learn Kubernetes
or something ridiculous like that.
You know, these infrastructure platforms
really resemble the shape of the underlying implementation,
not the shape of the problem
that the application developer is facing.
And so even when before we started ComEx,
we're talking to customers,
people were like,
well, I just want someone to like manage my Kafka cluster.
And I'd say, well, why do you even have Kafka? And like, well, I don't really know. talking to customers people was like well i just want someone to like manage my kafka cluster and
i'd say well why do you even have kafka and like well i don't really know i think the database
falls over if i don't put a queue in front of it or like i need to like buffer some data somewhere
and what became clear is is that the the tools just weren't serving the needs of the application
developers and i think application developers and framework front-end framework engineers
understand the problem space because they spend all day doing it.
They sometimes don't have the power to fix the problem because they don't build the database themselves.
And I think oftentimes infra folks, including myself, don't have enough empathy for the application developer.
At the end of the day, all that matters is the application.
Okay. If you're looking for a better type of backend, Convex is the full stack TypeScript development platform you've been looking for. Replace your database, server functions, and glue code. Get started at Convex.dev. That's C-O-N-V-E-X.dev. Again, Convex.dev. Thank you. Well, we're joined by Andreas Kling.
Maybe you know of Awesome Kling on the internet.
Maybe you've heard of Serenity OS.
Maybe you've heard of Lady Bird.
Maybe you haven't, but we're here to hear about all those things and more.
Welcome to the show, Andreas.
Well, thank you.
This is a listener request, anonymous.
They would like to remain anonymous.
But I have to say, probably not even the first time somebody said,
please talk to Andreas about SerenityOS on the podcast.
So a couple of our listeners have been begging, dying for this particular episode.
So your reputation precedes you.
I'm just taken aback by what you've taken
on. I think Adam and I both agree with this. We were talking about this conversation yesterday
and we were both kind of like, wow, an operating system and a web browser that runs on set operating
system. I'm assuming that's a lot to take on. Like why? I think Adam, I'm stealing your question.
You're like, what I want to ask him is why? And was like dang it I wanted to ask him that too so we both are asking you why why are
you doing this right uh well it's a long and complicated story but um I used to work on web
browsers at Apple for many years and at one point I quit and I didn't really know what I was going to do with my life.
And I ended up doing drugs with my life.
And that was not a very good life.
And eventually led to me going to a rehab program.
And when I came out of there, I found myself with so much time.
Because when you do drugs, they tend to take up all your time and then you stop
doing them. And then suddenly you have nothing but time. And it's really, really strange how
many hours there are in a day when I'd never thought about that before, but I really felt it
then. And I wanted to just find something to fill my days with. And I kind of tried a bunch of
different things. Like I tried to go to a literature class and I wanted
to learn some new profession, but I just ended up programming after a while. And I kind of started
skipping my English literature classes actually, because I was working on programming stuff instead.
And yeah, it just quickly fell back into programming, which I had always loved. I had a couple of things that I
always wanted to do as a programmer, but never really like engaged with properly. And one of
them was building my own operating system. Because I think that's one of those things that everybody
who programs at some point, at least thinks, well, what if I made all this stuff myself? Like,
how would that be like, wouldn't it be cool if like my computer had my operating system?
I don't know.
It's just like an idle daydream.
I think everybody has at one point.
And I was really just so desperate for something to fill up all my time.
It's hard to explain if for people who haven't been in that situation.
But suddenly, like building an operating system seemed like
maybe that would take up some of that time um yeah lots of it probably yeah so i just kind of started
poking at it and i didn't feel inhibited by the hugeness of the task in a way that you normally
would and it became kind of a therapeutic project to keep me busy and keep my mind off of falling back into
drug habits and just do something wholesome with my time. And it was just me hacking away in a
little cabin by myself that I had, I had rented a little place outside of town for a while just to
have somewhere to stay, give everybody a break from myself, and just sitting there working
on this. And after about six months or so, I made a little video about it, because that was when my
rental agreement ran out on that cabin. And I thought, okay, well, I got to leave this place
where I've built this thing, I'll make a little video commemorating what I managed to do. And I posted that video to YouTube.
And I think the next day, somebody
had posted it to Hacker News.
And people were, I guess, impressed
with the level of detail I had managed
to squeeze into this little thing in a fairly short time.
Looking back on it now, it's like incredibly primitive.
But of course, at the time, it didn't feel that way. It felt like an amazing thing because it had
a GUI and networking and could log on to IRC and chat with people and stuff. And
that was interesting, because it kind of showed me that there are lots of people out there who think
this is fun and interesting and they might like to help out. And sure enough, people started making
pull requests to my GitHub project. I think the very first pull request I got was somebody adding
a script to build the system because when it was first published, there was no way to build it.
It was just like a big source code dump for my home directory. So, you know, overnight,
I got a couple of thousand people seeing the system and learning about it on Hacker News and
people wanting to try it and there was no way to do that. So I felt a little bit silly, but I just
wasn't prepared for the visitors. Anyway, that's sort of where
the whole thing began. And then slowly but surely, a community formed around the project,
and it's been growing ever since. We went from just by myself at first, and then like 10 people
or so over the next couple of weeks. And then more and more people kept joining. And today we are, it's hard to measure, but we
have over 900 contributors on GitHub. And on our Discord server, there's, I think, over 8000 people
hanging out. Of course, not all of them active, but it still gives you a sense of the scale.
And yeah, that's kind of what happened. And it started as a therapeutic thing for me, right?
Like just as a way to keep myself busy.
And I really love that aspect of it.
And I wanted to give all the people who come to the project,
I want to give them like a chance to make it something like that for themselves.
Like maybe not necessarily exactly what I have,
but just some kind of playground or a place and a space to
engage their curiosity about programming. So I always encourage people to implement something
that they would like to know how it works, or just mess around with some kind of software that
you don't know anything about. So we've had people implement like TLS and different compression algorithms. We have JPEG
decoders and encoders and stuff like that. Somebody made a spreadsheet and
there's just all kinds of stuff. And of course within all kinds of stuff you
eventually also find a web browser which I guess is sort of the the second part
of the greater story.
Because at some point, I didn't really want to make a web browser for the longest time.
People kept asking me that because they knew my background in working on browsers at Apple.
So people kept asking me on YouTube and on IRC, like,
hey, are you going to build a browser for Serenity OS?
Like, you know how to do it, right?
So why don't you just do it? And I always just told them, I spent so many years working on browsers.
I don't want to do that again.
Like, do something new here.
Like, give me a break.
But at some point I thought, you know what?
All the texts that we have in Serenity OS
is kind of single typeface, single font, single style.
And there's no way to have rich text.
And wouldn't it be nice if you could display rich text, you know, with bold and italic
and stuff like that?
And yeah, we should probably have a rich text widget of some type so you can display that.
And what's a good internal storage format for rich text?
Well, why not HTML?
Like that's rich text.
And I just started hacking together a very simple little HTML display widget.
And then I got a little bit like bitten by a bug
while doing that.
And I just kept adding stuff to it.
So I eventually had like a CSS engine
and then it gained like network loading capabilities.
And it just spiraled very quickly.
And now it supports Intersection Observer, which I just learned from your recent. Now it supports Intersection Observer,
which I just learned from your recent update. Wow,
Intersection Observer. So you're getting to
the most minute web APIs at this point.
You're going for them all now.
Yeah, but really, for a long
time, I genuinely
believed I was not building a browser. I was
just trying to make a rich text widget.
Very competent rich text widget,
but still, it wasn't a browser. And I think the way that I convinced myself that it wasn't a
browser for a long time was that we didn't have JavaScript. So I kept saying like, no, no, no,
it's not a browser because then it would have JavaScript. And then for whatever reason,
and I think in March of 2020, I just started making a JavaScript engine for it because it seemed like it would be fun to do that.
I started building the thing in a YouTube video.
So this whole time I was making random YouTube videos
of just programming the system.
And the one where I started just building a JavaScript engine
from nothing ended up being like a crowd favorite, basically,
because people saw that and they thought,
wait, this looks like something you can just do. Like I could do this. And a lot of people just
joined in to help out. So I got many pull requests just after that first video, people adding
new operators to the language and implementing various APIs that you have in JavaScript.
Like very quickly, the community just kind of attached
itself to this new thing I started doing. And that has been a theme in Serenity OS in general,
that somebody starts building something, a little corner, and then people take notice,
and then they just gang up on that and help out. And it's kind of magical when you see it,
because you think that these things are going to take a long time or they're not going to happen.
And then you just need that spark that lights the fire and then the people come and fuel it.
And yeah, that's kind of what happened with JavaScript.
And then at this point, it was hard to not admit that it's a browser.
It has the JavaScript engine in there. Is it or is it not a browser. So it has the JavaScript engine in there.
Is it or is it not a browser.com?
Yeah.
It's not building a browser.
But even still, even still, it was only runnable on Serenity OS and it stayed that way for
a very long time.
So in order to work on it, you had to work on the code on your host operating system
and then boot into Serenity OS in a virtual machine just to run the browser, which was pretty cumbersome. But we worked on it that way for years
until last year when I thought it would be kind of cool to have a shell for this thing on Linux
so I don't have to boot into the virtual machine every time. And somebody had already ported the web engine library in the
JavaScript engine to Linux. So all we were missing was just like a graphical shell for it.
We had a simple headless browser command, which let you like you gave it a URL, and it would
render the URL as a PNG. And at that point, it's like, you almost have a browser, you just need the GUI with the buttons and the stuff. So I built that. And then suddenly, that's was the start of Ladybird, which
is now today, sort of the name for the whole greater browser project that came out of this.
And it's been a weird evolution. But in some ways, it seems like I started building the operating system just so
that I could eventually build a browser again. So I could go back to being a browser hacker
because that's what I just naturally want to be. And that's what happened. And now I'm just
working on browsers all day again. And it's great. Full circle. How do you install this?
Like what can you install this on? Do you have to like build it on top of Linux or do you have
to build it in this
virtual machine
does it run on a
Raspberry Pi
help me understand
like how I can get
to an environment
right so
depends on what you
want to run
do you want to run
Serenity OS
or the Lady Bird
browser
if you want to run
the whole operating
system
OS
I want the whole
kit and caboodle
I want it all
yeah the whole thing
that you can build
on Mac OS or Linux at
the moment, and probably on Windows if you have WSL. And you check out the repository on GitHub,
and then we have a build script that just takes care of everything for you. So you essentially
run one command, and it takes a while. But once it's finished, it will spawn a virtual machine with the system running in it.
So very, very little required from you.
And really, it's slow the first time you build it because we have to build a custom compiler for the system the very first time.
So that ends up taking a bit of time.
But if you have a modern computer, it takes maybe like 20 minutes or something.
Does it only run in the VM then?
Or is it meant to be a host operating system?
I mostly run it in a VM.
Some people are really into running on hardware.
So we have a sort of a sub-community
that focuses on bare metal.
That's me.
That's why I'm asking this.
Because I'm like,
before I have more questions,
I want to know how I install and play with it.
So I don't see any ISOs to download.
So I'm like, how do I get there? Do I i have to build this why do i have to build it why can't you just give me isos kind of thing you gotta be hardcore yeah you have to build it because
we can't boot from an iso at the moment and it's not something that we've really focused on and
from early on we've tried to kind of have a little bit of a barrier to entry to keep tire kickers and sort of people who are likely to make more noise than contribution.
Just keep them at bay a little bit because...
The freeloaders.
I'm just kidding.
That was the tongue in cheek to some real stuff.
I don't know, Adam, could you make more noise than contribution?
No, I just, I've been in open source and the open source world since, I don't know, however
long, like for the last 20 years.
And I'm very familiar with the people that come and kick your tires.
And I think when I set up this project, I was just a little bit tired of that and I
didn't want that type of energy.
So I thought, what if I just say you have to build it yourself?
Okay.
My hypothesis was this would keep out 90% of annoying people. Not me just say you have to build it yourself okay my hypothesis was this
would keep out 90 of annoying people not me i'm gonna try it i'm gonna build it like distro hoppers
kind of people they're just like i want to just try out a new disc like they think of it like a
new linux distro yeah exactly exactly yeah and but it's it's always been a hard thing to convey that
in a friendly way because it's not meant to be like elitist or anything like that.
It's just to keep our environment where we communicate with each other, like keep that
focused on development instead of helping people who are just like kind of casually
interested.
That was definitely an issue on our old IRC channel that we had in the past that people
would just come in and dominate the conversation for half an hour with their build issues.
And nowadays it's less of an issue, but we still don't have the ISO.
I think, honestly, if somebody wanted to just add an ISO and add a build procedure for producing these kinds of things, I wouldn't mind if somebody did that.
It's just nobody has stepped up to do it because in our community, people just work on what
they're interested in.
That's, um, we don't have any like shared plans or goals or anything.
Everybody is invited to make their own plans, make their own goals.
And because of that focus tends to be kind of flaky a little bit, but overall it's still
seems to work out just,. Just things that you might expect
in a system that's been around for this long might not be there because nobody thought they
were interesting. Those questions kind of come back to the why, because your why of why it exists
is different than the why that it exists. You know, like what does SerenityOS accomplish
is different than the why that you made it you know so your why is this
therapeutic outlet the obvious trauma in your life that you know you had to recover from and
thank god you did but now Serenity OS has a different why and so my question was the ISOs
because like hey I want to check this thing out can I can I put it on some simple hardware like
a raspberry pi or just something pi-like because there's lots of orange Pis and you've got Zumba boards out there.
You've got lots of little things you could do to allow tinkerers to sort of play in your sandbox.
And the why of Servered iOS might elicit that.
Yeah, sorry.
I got lost in the details.
That's okay.
No, to answer to your question, we have an ongoing port to
64-bit ARM architecture,
but it's not
super stable yet.
We can boot into the GUI desktop
and I think some
people... I've seen video of people booting it
on Raspberry Pi, but not
all the way to a usable GUI.
I think one of the blockers is that we can't
take keyboard input
on those machines yet
because we don't support the USB controllers.
So there's
some stuff there to implement.
So if somebody out there wants to learn
how to support USB
controllers on a Raspberry Pi, they can go to
SerenityOS as an outlet to enable
to be the
proving ground to hack on right absolutely
yeah i mean that's that's what that's kind of what this exists for is like yeah just to tinker
it's not meant to be while it can be a graphical user interface that pays homage to the old 90 days
that gives us that you know some of us that are in our 30s and 40s that nostalgic feel of the
younger generation 20s is probably not gonna get that that. Nostalgically, they'll see it as, you know, I don't know,
just something to play with.
But that kind of gives us a chance to go back into that era of a GUI.
But it's a playground.
It's not meant to be.
Well, it can be, but it's not meant to be a daily driver.
Like you're not going to use it as your host OS, the daily driver.
It's meant to be a playground to explore and to tinker and to commune with other folks that have similar interests.
Yeah, I agree with that for the most part.
It seems like it.
I'm not saying that's what it is.
It seems like it based on your description.
Yeah, no, no.
I think that's basically how most people engage with it.
And I'm really happy that it can be that for people.
But for me personally, I do have a very long-term goal of using it as a daily driver.
So I do tend to just focus on working on things that I want to use.
So that's kind of how I ended up motivating myself to build a browser also.
Because if you're serious about building a daily driver, you're going to need a browser.
Because daily driving happens in the browser.
This is a weird thing, but I get into a lot of arguments with people about this because I
keep insisting that an operating
system today includes a browser.
You can't have an operating system without a browser
because nobody would ever use that.
Then there are purists who say that
an operating system is just a kernel
or just a kernel on a command line or whatever.
Well, a GUI OS, I think, requires a browser.
A headless OS, like Linux, is used in most cases, does not necessarily require a browser.
Yeah, fair enough.
Fair enough.
So it depends on what you're using it for.
Yeah.
The important qualifier.
You're right.
But I can see where you might say, well, where do you draw the line?
Where does an operating system end
and client applications begin?
You could definitely bike shed the definition of that.
But I think,
and maybe you don't want to be
a competitive operating system,
but if you wanted to have people use you
as a daily driver,
you have to at least provide access to a web browser.
Maybe it's not part of the OS,
but it has
to be an app getaway, or I don't think there's a package manager. Maybe there is, but like it has
to be installable, available, hopefully. I mean, right there, pre-installed. I mean, most OSs today,
even look at the newer OSs, like iOS comes with a browser. That's a new operating system in terms
of OSs. Android comes with a browser. So it's got operating system in terms of OSs. Yeah. Android comes with a browser.
So,
it's got to be available.
You probably can't apt-get anything.
You probably can't RPM.
You probably can't
brew install.
Well,
we do have a
ports system.
So,
we have,
I think,
a couple of hundred
packages ported
to the system at this point.
Although,
no graphical browser.
We have a couple
of text browsers.
But, the system doesn't come with any third party software. That's kind of part of the whole spirit
is that we just insist on building everything ourselves to the point of stubbornness,
just because it's fun and because it's challenging, right? So we have a lot of stuff that we do that's
incomplete or not very fast or just missing
entirely, just waiting for somebody to add it.
But that's just kind of adds to the charm of the system.
I think that there's just this endless supply of tasks that somebody could find and engage
with.
There's always a reason to join the project.
Like we get new people joining all the time, picking up super basic stuff to work on.
And people ask me, like,
how do you recommend getting into this? Like, what should I do to contribute? And I always tell them,
just mess around with the system until you find something that's missing or something that bugs
you. And then try to do that. And that's worked out beautifully, because everybody finds like
their own angle. And nobody ever picks the same thing as somebody else i think a couple of
days ago we had the first time ever that we had two pull requests solving the same thing and that
had never happened before and we've had like thousands of pull requests was it a bug or was
like a missing feature i think it was a bug like you would do some interaction in the spreadsheet
application and then it would crash and then two people independently discovered that and fixed it well you're hitting critical mass at that point you
know that's right double the bugs two people using the same part of the system that's huge
i was trying to think about an analogy though i was trying to think like what if you stayed in
the bed and breakfast and when you went there they like didn't have your bedroom so you had
to build it you know right or like in daily driver mode or like a coffee table yeah right or like a
home it's like well i gotta go to the bathroom but there is no bathroom so i suppose i should or in daily driver mode. Or like a coffee table. Right, or like a home.
It's like, well, I've got to go to the bathroom,
but there is no bathroom.
So I suppose I should build the bathroom.
It's kind of like that.
I try to think of some sort of analogy of just-in-time need.
Right.
So far we haven't needed a bathroom, but apparently you need one, so I'll build it.
Let's work on that.
Yeah.
I mean, in part it's because it's fun that we're set up this way,
but it's also heavily inspired by my background at Apple
because while working there, I just worked on browser performance,
but it was so convenient to have all the experts on everything,
just all gathered in one place.
And whatever issue I had anywhere in the stack at Apple, like somewhere in
Mac OS, there was something making Safari slow, I could go and find the expert, he was probably like,
in the next building, at worst, maybe two buildings away. And that kind of environment
doesn't really exist in open source, I feel, at least not on the sort of macro scale where you have an entire desktop and then it's built in a cohesive way by a team that all communicate with each other and have take the pros and the cons of that
and try to build kind of a very high accountability culture,
I guess, where whatever goes wrong,
the person responsible is somewhere in our community.
Like, you can never point a finger outside.
And really, that has ended up working really well as well.
The only time fingers ever do get pointed
is somebody pointing either at the compiler
or at the virtual machine that we're using.
We have found bugs both in compilers and VMs,
but those are rare.
99% of the time, of course, it's our own fault.
You didn't write the compiler, did you?
This is off the shelf.
What are you using?
What's your tech on?
Yeah, we're using GCC and Clang,
so just standard open source compilers.
We do also have our own language in the works,
but it's not yet mature to the point where we're using it for the system.
But a little over a year ago, I started working on a new language
after kind of getting frustrated with C++
because I felt that other languages
were making progress on memory safety,
like Rust and Swift and these other modern languages.
And C++ was not really moving forward
on that particular issue as fast as I would like.
And I teamed up with one of the Rust core team folks,
my friend JT,
and we put together a simple memory-safe language
that transpiles to C++.
So you would write code in this sort of limited language
that's memory-safe and then generate C++ from that,
and then it would just fit into our existing C++ system.
That was sort of the theory.
So in practice, it's turned out it takes a long time
to get this working just right.
So we haven't integrated it into the system yet,
but it is being worked on.
And it's an interesting area.
Does it have a name?
Yes, it's called Jakt, which is J-A-K-T.
That's Swedish for hunt,
as in the hunt for a better programming language I guess
okay
yeah
I like it
and then it turned out that
I didn't know it when we started working on that
but it turned out that there were multiple
similar efforts going on at the same time
so Google had a
carbon language that works much in the same way
that they transpiled to C++.
And one of the C++ standards committee folks,
Herb Sutter, he was working on CPP2,
which also works in the same way transpiles to C++.
So it seems like we kind of, I don't know,
joined some frustrated with C++
zeitgeist moment there. And I'm still interested to see how that pans out. Because as I said,
like I want to build something to use every day as my daily driver. And it seems sad to build
something that is not safe that has like all the classic memory safety issues and all those
C language family bugs and just dealing with those for the next 30 years. Just, I don't know,
it doesn't sound appealing. So I need an escape hatch out of that timeline. And why not Rust then?
Why not just? Right. So that's a question that I get fairly often. So we actually evaluated Rust for a couple of weeks,
and I prototyped parts of SerenityOS in Rust.
And I just ended up not liking how Rust has taken sort of a stance
against object-oriented programming.
And our operating system is like heavily object-oriented.
It's just written in this classical GUI programming style
because it's a classical GUI operating system,
as you can see from the way it looks.
And that particular paradigm of programming is kind of,
well, I don't know what word to use,
maybe shunned by the Rust language creators.
They seem to have something very much against that way of programming,
so they don't make it easy to write those types of programs in Rust.
Yeah, in particular, like virtual dispatch
and inheritance hierarchies
where you can create like a generic widget
and then a button is a widget
and these kinds of things, right?
Those are very cumbersome to express in Rust.
And that just became frustrating to me when we were trying
to prototype stuff. And then I just thought, I mean, we're doing everything else ourselves.
What's the language? How hard can it be? Right? Yeah. How hard can it be? Here's what seems hard
to me is, you know, it's 2023. You wake up in the morning. There's SerenityOS. There's Ladybird.
There's Yoct.
What do you work on and why?
Like, how do you decide what to do?
You got like three, at least three, maybe there's more you haven't told us about, major things in the works.
Yeah.
So lately I work on Ladybird, so the browser, and that's sort of become my focus over the
last couple of months. I think for many reasons, but one is that I started seeing that we're making really
good progress on it.
We're able now to render real websites with not perfect fidelity, but getting better and
better.
And we're able to run complex JavaScript and stuff.
I don't know.
It's just starting to feel like it could become a real browser.
I watched you render apple.com and your demo.
Yeah.
And I thought, that's a pretty complicated website.
Yeah, it really is.
And they use a lot of technology to make a really slick website, you know?
Yeah.
And, you know, we lag when you load it and there are little hiccups and glitches.
But for the most part, we do get it right.
And there's a million things that
we need to improve. But I started seeing that we could actually build something here that could be
useful to people, like not just fun to work on, but also useful. And as much as I love working
on an operating system and building that with my friends, the idea of making something that could be useful to others
is very appealing.
And I don't even know in what way it would be useful,
like in what the application would be or whatever.
But I think there is a lack of independent browsers,
independent browser engines.
Nobody wants to build browser engines
anymore. Everybody just wants to package Chromium. And you look at what happened with Microsoft,
they gave up on their engine, switched to using Chromium. Opera, they used to have their own
engine, they gave up on that switch to using Chromium. So you got these big players with
essentially infinite money for these intents and purposes, and they just give up.
And they don't want to do it.
And I think that's really sad.
So in some way, it's kind of up to hackers and enthusiasts
to build new engines if we want to see new engines.
So I think there's a space for us here to do that.
And even though it started with me just wanting to have a rich text display widget,
now why not go all the way and just build a browser engine that people could use for something?
And yeah, it turns out this kind of resonates with a lot of people.
So over the last couple of months, I've been reaching out to some folks and asking if they want to fund
Ladybird development and kind of accelerate our progress. And I was able to get some quite big
support from Shopify, for example, they signed up to sponsor our project and had a German real
estate website called One Makler, which gave us a nice sponsorship as well, just for making their website work in Lady Bird.
What does Shopify see in the project?
Or like, you know, what would incentivize them to do that?
So according to Toby, the CEO, he is really into more web engines, like just diversity of engines.
And we talked briefly about that. And he kind of
sees it the same way that I do that it's sad that everybody's consolidating on Chromium. And
we need more, more is better, more is always better. And there was another guy inside Shopify
named Mike Shaver, who kind of started standing up for this as well during while I was in contact
with them. And he's one of the original founders of Mozilla. Back when they started, I think he
was one of the first people there. And, and then I also got some large sponsorships from people who
wanted to be anonymous as well. So I wish I could tell you
who they are. But maybe, maybe someday I will. What's up, friends, I'm here with jeremy tanner devro at tailscale and i've been using tailscale
for the past i want to say the last year and i consider critical home lab infrastructure for me
as you may know i'm a home labber so that means i take pride in a solid home network wi-fi services
that make the home run home assistant for for automation, lighting. And of course, I run
PiHole to block ads at the network level and to protect my family from ad tracking. And PiHole
has this web UI that you can access from the land. But for a while there, I just didn't have access
to this service or other services like Portainer or just anything else that had a web UI or
something I would access via IP on the local
area network. But Jeremy, tell me about a world where via Tailscale, you can access Piehole,
Portainer, or any of these other services you might run in your home lab and access it externally
from a local area network. Yeah, you hit it when you said anything, anything and from anywhere.
And so Piehole being a DNS black hole.
If you notice the difference between the comfy experience that you had at home and when you were out of your house, whether it was for work, a coffee shop or even on your mobile devices, the being able to set up a tail scale on your mobile device and have access to the same pie hole and filtering rules
that you do at home wherever you have an internet connection is a thing. Same thing when talking
about streaming, instead of exposing your network storage to the internet and getting that ransomware,
keeping that on your private network, but extending the private network to any device that can run the client. And so having, um, anything that can run the client includes
your Steam Deck. That's just a Linux box with, uh, the controllers grafted onto the sides of it.
And so if you're somewhere that has internet connection and wants to watch some of your video,
plug it up to a large TV. And if you're in a hotel room, use that as your, uh, as your media center,
that's playing the, uh, the shows that you're trying to catch
up on from home instead of whatever hotel TV has on it.
Instead of buying a service or paying a small monthly subscription, you have compute and
storage at home.
It's just an easy way to get back to those instead of usually inventing a bunch of things
that you'd love to do.
But those sorts of things become accessible to you on your phone while you're outside the house,
instead of something that's neat to use, but then you miss while you're away.
Yeah, for sure.
You know, I run Plex, so I'm in big agreement with that, of course.
But just being able to do what you can do with TLS scale is so cool.
Without having to learn all the VPN things, it's just such an easy tool to use,
easy tool to install on anything,
really Linux, Windows, Mac, so easy to use.
Big, big fan of Tailscale.
And for my Homelab users out there,
you can totally use Tailscale 100% for free.
You get three users up to 100 devices,
which is like way more devices
than I think I would ever need to use Tailscale on.
The free forever tier is amazing and a great place to start,
and especially to use it for your home lab needs alone.
Check them out at changelog.com slash tailscale.
The free forever tier is waiting for you to try it out.
Again, changelog.com slash tailscale.
And make sure you tell them your friends at ChangeLog sent you. What was the sadness mentioned from Toby or for you?
I get that more is better, but why does the world need more browser engines?
What's the permutations of how that negatively or positively affects, I guess, the web?
Well, I'll give you a concrete example.
So when I logged in to the studio to chat with you two,
it said you have to use a Chromium-based browser
because I tried to log in with Firefox at first and it wouldn't let me.
And I think this is exactly what happens
when you have kind of a monoculture develop around a single engine. Because
as we saw a couple of decades ago with Internet Explorer, that people just started targeting a
single engine because it was dominant in the browser marketplace. You eventually get into
a position where that browser just decides what the web is. And I think we're kind of heading towards that a little bit.
We still do have Apple pushing against Google with Safari.
Like if Safari says no to something,
they still control a fair bit of,
especially the mobile browser market.
But on the desktop, Chrome is so dominant
that websites are now getting brazen enough to say like,
well, you need Chrome to use this.
And I think that is not a good state of the platform. And it's something that we do need to
steer away from so that the web can be, I guess, like more democratically controlled,
or at least have more than a single implementation so that you have.
It's kind of warding off the the typical monopoly drawbacks
right like if you get to a monoculture right the incentives to improve i mean this was the
internet explorer problem that we lived through and really firefox helped bust that thing up
and have something else that you had to also pay attention to and caused Microsoft to innovate, et cetera, to catch up and all the things.
Typical monopoly things is like, well, what we say goes because we're the only one that
matters here.
And as we've made Chromium the dominant platform, we being the world, I guess, of users who
decided to install it, we see Google doing things inside of chrome that are not in the user's best interest
some are some aren't and you can argue about the individual things but like you just don't want
that to be the only thing that matters because then there's no checks or balances so i think
it's cool that ladybird is like the is like an opportunity to escape the serendios and like
become like this more generally used piece of software that you don't have to be
a OS hacker or tinkerer
or even a distro hopper.
Eventually, if you
deliver on it,
just a person who wants a browser
that aligns with their
tastes or desires.
Why we pick browsers in the first place.
It's pretty cool
that you built this hesitantly.
You weren't building a web browser.
I mean, you kept saying it was not a web browser, you know, for yourself to use and your friends.
And it may eventually be, you know, more important than Serenity in the first place.
That could be kind of a cool turn of events, you know?
Yeah, I guess so.
One thing that we already have heard from folks who are doing web standards
is that they appreciate what we're doing
because we are putting their standards to the test
because it's been a long time since anybody picked up the web standard specifications
and tried to actually implement them from scratch.
Oh, I see.
And we've certainly found many issues that just don't come
up if somebody is just working on like an existing mature implementation but us having to do
everything from scratch we kind of discover missing things and inconsistencies and stuff so
that's something that we're engaging with more and more just the standards community and trying to
help improve the standards just to i guess guess, like, leave them better than we
found them in a way and help make it possible for other browser engines to come up as well.
And I should mention there is the servo browser engine effort as well, which started inside
Mozilla, but eventually they, I think, laid off everybody working on that, which was pretty
sad. But now, earlier this year, it started up again because the Egalia, the Spanish co-op
company, they signed on a bunch of full-time people to work on Servo, like pick it up and
bootstrap the community again. And I think that's fantastic to see that effort continue and get revived.
So it looks like we might have two new browser engines
coming up in a space where there was
very little new activity for a long time.
Isn't a browser engine similar to the way Linux is used, though?
I mean, itself, Linux has a kernel,
there's many flavors, many distros.
Chromium is open source.
I'm still not sure I understand why it's such an issue
that we only have one dominant.
Chromium is open source, but it's effectively controlled
by the hundreds of Google full-time engineers
who work on it.
Yes, they let other people in, but it's ultimately Google
who decides what goes in the Chrome browser.
They have just a way bigger power than anybody else over what happens over there.
And some of the downstream consumers of Chromium are better about pushing back or removing some of
Google's things. I know Brave in particular, they do change and tweak quite a lot of things
about Chromium before giving you Brave. But even so, like at the core of it, there's still
the completely or not completely, but there's still the Google controlled Chromium engine.
And I think just like we don't want to have every car have the same engine, because that wouldn't
be fun. And in the same way, we don't want to have every browser have the same engine.
Does having many engines mean repeating?
Like multiple JavaScript engines,
you know, that kind of thing.
Wouldn't that produce more bugs potentially
or, you know, more breakpoints for the web?
I think the one issue with the web as it's trended up,
obviously, like the internet has, it is the web.
But, you know, specifically like web apps web browsers you know websites apple.com even you
know like we've been able to like i recall days when it was like just super super challenging to
build for the web because it was the early days you know when there was bugs everywhere multiple
browsers and that was like wouldn't that just produce more breakpoints
to make the job of a developer that's already hard even harder
because there's more diversity in engines to produce more bugs
and more breakpoints?
That's a really good question.
So it's funny because in the last couple of days,
I've been messing around with 1997 era browsers.
So I got IE4 and Netscape 4 on my computer. And then I've been
just doing web dev as if it's 1997, just to amuse myself. And it's exactly like you say,
it's impossible to get them to run the same scripts because they were so different. And
it was just a totally different time in the browser world where they were just aggressively
pursuing what they thought would be sweet features.
So Netscape thought, oh, like dynamic content should work in this way.
And they just added their own elements for that and their own APIs and their own ways
of doing it.
And then IE came along and they had some other ideas and they added that.
And I don't know if you did web dev back in the 90s.
I was just a kid, but I would...
2000s.
2000s, okay.
2000s plus, yeah.
So I had my first homepage, I think, in 96 or 97,
and I definitely remember copy-pasting sweet JavaScript snippets.
And they very often had these big if statements
where it was like, detect N where it was like detect Netscape
4, detect Netscape 3, detect IE, detect Mosaic.
Like everything had to be built in that way.
But to your question, today, standardization has come so far that there's a much, much
greater consistency and interoperability between engines.
And standards have become really, really good compared to the way they used to be.
And that's actually one of the big things I would credit with our ability to even build Ladybird is
that standards have gotten so good that you can sit down and implement them. Whereas, you know,
10 years ago, you would read the standard and then you would try to figure out what browsers
are actually doing. And then you would do kind of somewhere in between those things. But today, standards are fantastic.
And there's millions of tests written by the people who make the standards and people who
work on browsers. And there's even a shared effort between browser vendors called the web platform
tests, where I forget how many tests exactly, but it's over a million tests, which are just
unit tests. It's sort of you can use to verify that you are interoperable with the way other browsers behave.
And we don't, we haven't even begun to run that test suite properly yet because we can only run
parts of it. But given that it exists, I'm reasonably confident that if we can get to a
point where we pass all those tests, or at least as many tests as other engines do, then you could argue that we are compatible,
as far as you can measure, at least,
with one or more other browsers.
And yeah, in the past, I would have totally agreed.
More implementations means more chances for bugs.
But today, it's so much easier to verify
that your implementation is correct,
or at least, if not correct, then still compatible because correct is kind of a flexible concept
in the browser world.
Yeah.
So because web standards are so strong
and so well documented and so vetted out,
there's room for multiple engines because,
and then you can only support X standards
because I'm sure you don't support all the standards
as you mentioned already, right?
So you can have a grid similar to I can use, for example.
Which do I support?
Do I support these features or those features
or these standards?
It's similar to that.
Because the standards are so strong,
that's why you're advocating for more engines.
Yeah, that's a good way of putting it.
And I think more engines also means
that the standards can become stronger
because more engines verify that the standards actually live up to their name,
that they actually deliver on describing exactly how something should work.
And yeah, it seems to be working so far.
But at the same time, I don't want to pretend like we support all of these features
because we do have
a lot of partial implementations. It's hard to say that, oh, I support CSS Flexbox, because
Flexbox has a lot of interesting peculiarities and edge cases. But it's much easier when you take
the total battery of tests from the web platform tests that cover Flexbox. And then you can say like, Oh, I support 89% of those tests.
Right.
And we don't have a way to produce that number yet.
So it'll be interesting when we do.
It would be interesting if that was like a,
a feature of implementing the standard,
because then that would encourage more engines because you can easily,
or in some way standardized the way you would depict what percentage of the standard
you support you know yeah it's kind of interesting that we have chromium and webkit and i'm not sure
because i'm not from elsewhere in the world but at least here in the states where i live and my
experience in life is my choice or my choice as a developer is to build on either those two
engines essentially if i wanted to do something.
That's what Safari's built on.
And everybody else,
as you had said already,
has kind of given up
and they build on Chromium.
What do you got?
Gecko.
You got Firefox.
Well,
haven't they given up too?
Pretty sure they're like
Chromium,
aren't they?
No,
Gecko's a thing.
Gecko's still out there.
Gecko lives.
Is Firefox built on Gecko
then still yet?
Yep.
I'm pretty sure.
I thought they gave up
and went Chromium too.
No, Gecko is, or Firefox in general, is very well funded.
Is that right?
Yeah, they pull in a lot of money
because they still have the Google search deal.
So Google is paying handsomely for the privilege
of being the default search provider.
So of course, I don't know how long that deal will last,
but at least for the time being, they are very well-funded.
It says right here,
Firefox runs on our quantum browser engine
built specifically for Firefox,
so we can ensure your data is handled respectfully
and kept private.
And that's from the Firefox FAQ on Mozilla.org.
The question, the FAQ is,
is Firefox Chromium-based? Firefox is not based on Chromium, it says.org. The question, the FAQ is, is Firefox Chromium-based?
Firefox is not based on Chromium, it says.
Yeah.
So, okay, I take that back.
Three, we got Quantum, WebKit, Chromium.
Sure.
So why don't you pick up Quantum then versus...
Because he wants to write everything from scratch.
Yeah, that's right.
I want to write everything from scratch.
For fun.
Okay, all right.
We're getting to the whys here. We're getting to the whys here.
This is the why.
What's interesting about it is there's an educational angle at this, I think,
which is very valuable for us humans.
Those who want to learn how to do these things is
how a web browser works is a complicated thing.
And if you wanted to learn about it, having a simple web browser,
and I'm saying simple in terms of just length of life,
because the longer software lives,
the more complex it becomes just by the nature of change.
And so my imagination is that Lady Bird
is quite a bit simpler than even Firefox,
which is an open source thing
that you can go and read and look at
and probably has masses and masses of deadlines of code
and everything else in there over its lifetime.
I'm not saying it's not good software.
I'm just saying you could probably learn a lot from Lady Bird
just because you could probably grok it better than you could grok.
And the same thing probably goes for Serenity.
Do you think that's the case, Andreas?
Do people come and learn a lot about systems programming,
learn a lot about how a web browser works,
how an operating system works?
Because what you have is somewhat bespoke
and according to your desires, so maybe not full-fledged,
but you have a kernel and a base of applications
that don't have thousands and thousands of developers
over many, many years and just the legacy code.
Yeah, that's absolutely true.
Yeah, yeah, yeah.
Yeah, I think that's cool.
Yeah, it's one of the big draws for people, I think, is that they get to learn about systems programming and they get to develop themselves as programmers.
And one of my weird pleasures in life is seeing people like learn new things and get better
i didn't know i had this passion when i started building serenity os but over time i've seen it
happen again and again like especially young people come in and they just uh you know have
been programming for a couple years and never really worked on anything big and then they come
into our project and they engage with these big things and they push themselves and they learn, get really good,
really fast. And it's so cool to see, I think. And it's, I don't know, it makes me really excited
about the next generation of programmers because I was programming when I was very young, but
information was so scarce back then. And likewise with
community, like I didn't have internet access until I was in my early teens, but I was programming
long before that. And in terms of books, I had like whatever books I could find at the local
library, but they had to be translated to Swedish. So there was that. And nowadays, kids around the world
who are interested in programming,
they can find infinite reading material
and they can find infinite communities
who are super excited about programming as well.
And you can really see the difference
in just the pace that they learn at these days.
It's so cool to me.
And to get to sort of provide a space where some of that
development happens, that gives me tremendous joy. And yeah, I just love to see that,
like young people getting into programming and going berserk with it. So cool.
Well, I'm just trying to grok the Gecko versus Quantum thing as we talk here. Just to speak to complexity, I mean, just the Wikipedia page
about how Quantum is a new project that encompasses Gecko
plus a CSS thing, some servo stuff.
And it's like, if I was to say, how does a web browser work?
And if I was going to go download the Firefox source code,
my guess is I'd have a harder time picking up exactly how it works
than if I would having downloaded Lady Bird.
For sure.
And read through it.
For sure.
Yeah.
And one of the things, I mean, you mentioned sort of accumulating cruft over the years.
Yeah.
Which no doubt has happened to Firefox and to WebKit and Chromium as well.
Although I know, at least I know from experience that WebKit and Chromium
have very, very strong sort of continuous refactoring cultures where they aggressively
add tests and then they aggressively refactor. Whenever somebody thinks of a better way to do
something, they're not afraid to go into this deep refactoring. But even so, a code base that's
decades old is bound to be heavy and clunky.
So we do have that advantage.
And I think one of the ways that we try to maintain as much of this advantage as possible
is that we try to write code that's as close to spec as possible.
And that's something that it wasn't obvious to me because from my background in WebKit,
in WebKit, not everything is written the same way it says in the spec to do it.
Like WebKit happily invents their own things and their own concepts.
And I think all the major engines are that way.
Like somebody puts a spec in your hand, they tell you to implement this and you're like,
oh, well, I know how I can do this, right?
We have been far more meticulous about just sticking to sort of the
precise architectures described in specs to the extent possible. And our hope has been that that
will make the code easier for new people to work on because you put the spec side by side with the
code and it's kind of, here's English, here's C++. You can easily see what maps to what.
But also that it will allow us to continue to work on this
over a longer period of time because these specs, they're alive.
They have people working on them every day
and changing little things here and there,
which is really weird when you see it for the first time.
These things are not static documents.
You load the HTML spec today and then you do it again in two weeks and it's going to be different
well that's a that's gonna be frustrating right that's a moving target you're coding it up and
all of a sudden it's different and you're like wait a second yeah it's definitely frustrating
but it's the nature of the platform is that it's it is a living standard which is nice when you're
you can provide feedback you said you're working with them to a certain degree now yeah right like
if you can have a voice there,
that kind of makes up for the frustrations
of the moving target
because you're actually,
it's a target that you can influence
for the better
for the implementers.
Yeah, for sure.
For sure.
And at least I believe
that by sticking
as close to spec as possible
and trying to track,
like when the spec's changed,
we try to update our implementation
so it matches.
Sometimes it takes a while
to catch up, but by doing that,
it just makes it easier to stay on top of the situation.
Whereas if we would implement a spec once and then just go leave it alone
and work on other stuff, it's harder to get synced again in the future
when some new feature comes in and then you want to implement that
and then the spec talks about all these things that you haven't,
you don't have sort of an architectural equivalent of,
if that makes sense.
How do you diff that?
How do you diff your implementation versus the ever-changing spec?
Rationally, like, is it just like a literal diff
or do you have to like grok it as a human
and then determine and then implement?
In practice, you have to grok it as a human.
So that is probably the hardest part
of continuous work on a browser engine
is that you have to read a lot of specs
and sort of internalize how they work,
especially when it comes to...
It's tedious, man, right?
It can be really tedious.
Fraught with error or possible error, right?
Yeah, but that's why we have tests.
TDM is one of the things that programmers are most used to right i mean yeah yeah well what i'm getting at i suppose the reason
why i'm asking this question is not that i suggest you do it but like what if the path to multiple
engines was the ease of that diff right like if you didn't have to grok it as a human and read it
and discern you know what if
what if there was a way to say here's my implementation here's the spec where do they
where back to that percentage you know how easy could i programmatically reproduce
my adherence to the spec yeah because if you could do that in a programmatic way and you knew
without having to like waste your mental cycles you'd probably like your life better. And two, you might encourage more folks
to build more browser engines
because it gets a little easier
to diff the implementation to the spec.
For sure.
I don't know what the answer is to that
or why they don't work that way.
One thing I have heard from somebody who worked on specs
was that they preferred to keep the spec
sort of language agnostic to encourage the widest range of implementations. Because if you like the tighter
you spec something, the harder it becomes to sort of come up with shortcuts and optimizations and
things like that. Because if you like if you hammer it down too tight, then there's no room for
cleverness anymore. And I know that it's been a complaint, when some specs have been too strict,
and like demanding that certain things happen in a certain order, for example. And then browser
vendors complain because they say like, Oh, well, there's this optimization opportunity,
if we didn't have to have this specific order, then we could do these things in parallel.
But because of the spec, you're not letting us do that.
And I know that has been a complaint, but I don't know.
I personally agree with what you're saying.
I think it would be better if specs were closer to, like,
programming language that you could actually just take and implement.
And if you look at JavaScript,
the JavaScript specifications are closer to what you described.
They have sort of a stricter syntax for their pseudocode.
And in fact, we actually had somebody just this week
who's been writing a JavaScript specification parser
that reads the JavaScript spec in English
and then produces a parse tree.
And now we're going to see if we can turn that into a code generator
that would just generate the C++ for our browser.
Nice.
Which would be super cool if that's possible.
Yeah.
And I would love to see same capabilities with other specifications,
but I don't know why it's not that way.
I imagine that there's a reason that they don't want to work that way.
So your long-term goal for SerenityOS is to be your own personal daily driver,
right? Along the way, tinkering, joy, education, hacker, Ladybird, long-term goal. I mean,
10% global market share. I mean, what are you thinking? Like what would be success for Ladybird?
I think success would be if I can give it to my family members who are not programmers and they can do all of their
browsing with it. And it would be no real difference as compared to if they were to
use Safari or Firefox or Chrome. And I think it's obviously unrealistic to expect that we could compete on performance with,
you know, a trillion dollar funded team of hundreds of engineers at a big tech company,
but to build something that has sort of acceptable performance on typical web content that my family
members would browse, that to me would be a huge,
amazing success. Well, with the increased performance yields from ever better hardware,
you know, at a certain point, slow software is less slow than it used to be, you know,
maybe just fast enough for the majority of people on the majority of websites to the point where
eking out those performance
gains don't matter quite as much as they used to maybe true yeah it's a shame we didn't get those
superconductors but yeah i know right it was debunked wasn't it yeah it's not it's not all
that it cracked up for a moment there we were all so happy for a moment yeah yeah it was a fun it's
an interesting week or two whenever we're all like excited and hopeful but yeah no i think that's sort of the success metric that i have is
that it just becomes something that's usable to a non-programmer i like that yeah i think that's
achievable you know i think that's still a lot of work definitely where would you say it is like
if that if that's 100 like what percentage is it along the path
of a potential roadmap to that?
No, that's a great question.
I feel like we're at about 20%.
So there's a long way to go.
More ahead of you than behind you.
More ahead than behind.
Yeah, yeah.
Because the devil's in the details, I think.
And there's going to be like a million little things
that we're going to have to get right.
And it's easy to paint with the big strokes, right?
But to get all the details to look good,
you're just going to have to get down in the details
and the weeds with a million little spec issues and stuff.
And especially go out and test big complex websites.
It's going to be issues like,
oh, if I'm halfway through this YouTube video
and then I try to seek to be issues like, oh, if I'm halfway through this YouTube video, and then I
try to seek to this point in the video, then it doesn't work right. And those kind of things can
take a long time to debug, right? Because you have to understand how their player works and how
the scripts interact with that. And yeah, I know from experience of working on Safari that those kind of issues end up taking a long time.
But I also know that they're perfectly approachable,
perfectly solvable issues.
They just take time.
I guess I'm hoping that browser developer
is not like a magical skill that only some people have,
but it's something that it's like a gift
I can give to everybody to, if they want to,
they can learn browser development by just joining up and participating and doing it until they learn how
to do it. Does it currently support the video element? Can you put a video element into the
page and have a video play? You can, you can, uh, and we can play VP nine video. So we have Gregory, one of our developers wrote a VP nine codec, so we can play
those. And we have video elements, audio elements, but we don't support a lot of video and audio
formats. But we can always add more. It's just, it is hard to implement those things, because
it's a lot of math and a lot of tedious work, one might say.
But there are some people who just love that type of work.
And eventually they find out what we're doing
and they'll come implement more video formats and stuff.
So it's interesting because it would obviously be a lot easier
to go and just take a bunch of third-party code and glue it all together.
And we would have a working browser much, much sooner.
But then we would lose something i think we would lose that stubborn amazing feeling
of having built this whole thing by ourselves um which is kind of the whole point right yeah you
would yeah you missed the forest for the trees yeah you get there faster maybe be better code
or software than you're gonna write personally or your you know your community but it's not the point like it's completely missing the point
yeah yeah exactly and sometimes like new people join the community and they ask this question
like why don't we just take this thing and then somebody explains to them what we're doing and
why it's awesome and everybody always always understands. And then they become,
become one of us and get it or they're out.
That's right.
Okay.
Or they're like that.
You know what?
I like that.
That's cool.
I'll hack,
I'll hack on a VP nine for sure.
Codec.
Yeah,
no,
but we have,
we have just,
um,
just an amazing community of people who are interested in such diverse range of
things.
And they just come and work on random stuff that they are interested in.
And we patch it together and we make it into an operating system
and into a browser.
And there's an interesting amount of co-chairing
between an operating system and a browser.
So there's a great symbiosis or synergy between the two. Because you might think
that those are two separate things. But a browser is built on top of a huge stack of operating
system libraries. This is just core stuff like inter-process communication and 2D graphics and
loading image formats and fonts and all kinds of stuff. So even though I've been working mostly on browser issues recently,
that still ends up benefiting the whole operating system anyway
because I'm working on libraries that are used throughout the operating system,
which is nice.
You've been saying we a few times, or at least most times.
Can you quantify, can you extrapolate on maybe Lady Bird in particular
Because that's where you're working at currently now
I know you mentioned community a few times
But can you express some of the we behind Lady Bird in particular
And then maybe Serenity at large
Yeah, so we have hundreds of contributors
Who have contributed code throughout the years
Since we started five
years ago. Of course, not everybody's active. But we recently passed 900 individual contributors
on GitHub. But I think in an average month, we tend to see code from about 100 people or so
make its way into the project. And we all hang out on Discord all day and talk about programming.
And it's a lively, vibrant community of nerds from around the world.
And I recently, because of the funding I mentioned earlier from some new browser supporters,
I've been able to hire a full-time engineer to, to work on just the
browser. Uh, so there's a, there's sort of a, a new form of, we starting to take shape as well,
because I'm kind of building a little company and now I'm looking at hiring a second engineer as
well. And then we'll see what happens because, you know, money is finite and I
don't want to oversubscribe the funds that I do have. But I'm optimistic that I'll be able to
provide some jobs for some people at least to work on this stuff. But there are just a lot of different interests among the people who come. Like most people don't want to work on this stuff. But there are just a lot of different interests
among the people who come.
Like most people don't want to work on a browser,
for example.
That's kind of a niche within the SerenityOS community.
Most people have some other thing
that they want to work on.
I just end up talking about the browser a lot
because that's what I work on.
But I think like people actively working on Ladybird,
that's less than 15, I would think,
at least month to month.
And then we have tons of people working on random other things.
So it's a diverse community.
And it's hard to not be because we have such a huge scope of what we're doing, right?
We have the operating system with all the different GUI applications.
And we have a kernel underneath that with device drivers and all kinds of stuff. And
we have the language and we have the browser. It's a lot. That is a lot. You mentioned company.
I mean, cool for you to be able to hire somebody and cool for them to be able to be hired
to work on to some degree, a toy, you know, a fun toy for folks to play with and learn. And eventually maybe it becomes something
different with a long-term goal. How does a company play into that?
To be able to hire somebody? Do you have company goals?
How does licensing matter? Will people eventually
get rug pulled? I'm just explaining some of the ways
that open source transcends as you get
down the line of company and influence which is probably not where you're going but you know right
no no my company the company that i have is just a kind of a necessity to be able to pay taxes
correctly in sweden where i live so it's not a company that aims to make any kind of product
it's more just um a way way for me to pay my dues with
the government and do everything the right way. But it also allows me to pay other people to
work on stuff, which is a very recent phenomenon. Like for the longest time I was making
just enough to scrape by. And this is through GitHub sponsors primarily?
Through GitHub sponsors and patreon and
some individual donations as well which is what i've been living off of you know for the the last
two years and then when i decided to try fundraising a little bit for ladybird it just turned out to be
immediately successful so it kind of changed the the whole uh situation and what was possible for me. So I've just been adapting
to this over the last couple of weeks. And it's all very new and very confusing, but pretty cool.
And as you say, like, it's super awesome to be able to pay somebody to work on a toy.
Yeah. But I'll also like to start to think of it as something that could be more than just a toy,
right? Even though it's very far out. And i'm definitely not trying to kid myself about it and get ahead of myself
about the current quality and potential of what we're doing but i think if you look at like
ongoing projects that are attempting this we're definitely making more progress than anybody else trying to do it.
Next to Servo, they're also quite far ahead,
but they just have different goals,
different focus than we do.
I'd like to imagine that it can become more than a toy.
What do you call a non-capitalistic product?
Right?
I mean, because it is a product.
It is a product.
But it's not in the sense that it's capitalistic where you're trying to gain profit yeah necessarily the profit really is the the
value to the community to support the project to continue at least in so far as we know of its
current state right yeah so it's it's a non-capitalistic product yeah when i was young
we called it freeware yeah freeware. I would say it's a gift.
Yeah, it's kind of like a gift.
Like a good gift, like you put work into it,
you put thought into it, you probably put money into it.
Then you give it to somebody.
It's a non-capitalistic product.
Like here's a product, you take it.
And that's really what's going on with open source
in this pure form.
It's like it's a gift to the world.
Yeah, and I personally am a...
Well, I was feeling bad for calling it a
toy as well i was trying to trying to give myself some some flex there because i didn't want to
necessarily call it a toy because it doesn't sound sounds like you're belittling it to say
yeah it sounds like a pejorative like i'm not trying to be kind to it like like it's it's an
unkind thing to call it a toy which is not just a toy it's but to say it's an uncapitalistic product is too long-winded.
I'm not going to do that.
No, a gift is good.
But I also think of it as kind of a gift,
not just to the potential users,
but it's also all permissively licensed.
So all the code is under a BSD license.
So if anybody finds anything that they want to use in our code base for any reason,
they can just grab it. That's something that I wanted from the very beginning to just make this
thing maximally available to anybody who would find it useful. And that was from experience
working at companies where I was not allowed to use GPL code. And that was irritating to me. And
I don't want to do that to anybody else. Yeah.
So engineers at Apple could take Lady Bird, put a nice wrapper around it,
and have their next version of a browser or something.
If they wanted to, they would be welcome to.
Well, Andreas, anything that we didn't ask you that you were hoping that we would,
even waiting around for us to just ask about this or a particular angle into your story or anything that we haven't covered yet today.
I don't know.
I think it's all good.
I hope that I did all right. I feel like I'm up much later than usually.
So I hope I wasn't too low energy here.
Well, we apologize for that.
We could have flexed on the time we could have
gotten you nah it's all good it's all good
earlier in the day I felt like you
you delivered on all of what I was expecting
and yeah very thoughtful very interesting
stuff you make me want to
go play with it but I'm also kind of afraid to go
play with it because I might just be too
newbie and you might get the bug bite you know you
might get bitten by the bug I might
you know you're quitting the changelog and slinging Serenity OS.
Building out a browser or something.
I'm just joining Andreas' motley crew of hackers.
Come on now.
Hey, that'd be a story.
That would be a story.
Let's plug some URLs.
You got serenityos.org.
That's the homepage for SerenityOS.org. That's the homepage for SerenityOS. And then you've got Lady Bird, the browser, which is LadyBird.dev.
And then you've also got your sponsors page, which you mentioned.
This is how you're at least one of the many legs that you potentially have to gain financial support from the community.
And that's at github.com slash sponsors slash awesome cling all that will be in the show
notes of course don't have to go there now but i want to verbalize that to really put a pin for
our listeners to say hey if if this is if you find value and support this kind of thing check it out
go support it do what you got to do what else did i miss in terms of where they can go you still
have the patreon what's the best place to place to sort of concentrate the funding or the
donations or the support? So people
have different preferences, and I
try not to judge, but
from my perspective, GitHub sponsors is
the preferable because they
take the smallest fees.
So if somebody wants to make sure that their gift is
maximum impact.
And many tiers that you get the monthly
obviously, and you get the one times
so if you want to
give monthly
there's five or six
different tiers
there or you can
do one time
everybody knows
how GIF sponsors
works I'm sure
but it's
they do make it
pretty easy
and I'm glad
that they take
less fees
so that they can
support
fun
non-commercial
non
non-capitalistic
products like yours
the GIFs the GIFs of yours. The GIFs.
The GIFs of open source.
The GIFs.
Yeah.
What about my code?
If I want to donate my code,
is it just github.com?
Is it the Discord?
Like, where's the best place to engage
with you all in the community
and, like, become a Serenity hacker?
Right.
So the best place to come chat
is on our Discord server,
which is at discord.gg slash serenityOS.
And if you have code to contribute,
then come hang out with us on GitHub as well
at github.com slash serenityOS slash serenity.
Perfect.
That's the easy button.
Of course, as Adam said,
we link up everything in the show notes for you all.
So you can just click through and get where you want to go.
Andreas, thanks for coming on.
Appreciate our multiple listeners who asked us to have you on the show.
Might not have crossed our paths otherwise, but definitely I'm very interested in this
project.
I'm especially kind of bullish on Lady Bird and I want to see where you take that to the
masses.
10% global market share.
That's my goal for the product.
How cool would that be? That'd be like the most amazing sorry okay if i i'll go five percent i'll take a five percent but even if it's
just our friends and family i'd be happy with that as well but yeah love the project love hearing
about it it was it's pretty cool yeah thanks for having me thanks andreas Okay, a good next step is to become a sponsor of Andreas Kling.
He can be found at github.com slash sponsors slash awesomekling.
We'll link that up in the show notes.
So check the show notes for a link.
That makes it easier.
So you don't have to memorize my words and put them into a browser.
And if you're like me waiting for those ISOs, I guess just keep waiting
because it's in VM only mode
right now. So, play as you like.
Play as you like. Or
help them compile some ISOs.
Either way, check it out. SerenityOS
and Ladybird linked in the
show notes. A massive
thank you again to our friends at Fastly,
our friends at Fly, and
our friends at TypeSense.
They've got our back, and we love
them. And of course, those beats
from Breakmaster Cylinder.
Always love those
beats. Breakmaster,
you're the beatmaster in residence,
and we love you. We got a little
bonus here for you
Plus Plus members, so
stick around. If you're not a Plus Plus subscriber, you can do so at changelog.com you plus plus members so stick around if you're not a plus plus subscriber
you could do so at changelog.com slash plus plus 10 bucks a month 100 bucks a year support us
directly drop the ads get a little closer to that cool metal and get bonus content like today
once again jared and i will be at strange loop next month. So that's the last one. Make sure you go.
If you're not going, check us out.
If you're there, say hello.
Links are in the show notes to get registered if you're not registered.
But if you want to save time, just go to thestrangeloop.com.
Big thanks to Alex for working with us to get to that conference.
Much love, Alex.
That's it.
This show's done.
We'll see you very soon.