akling
Thanks jug! I'm super proud of all the folks who have worked on it with me :^)
> However, the thought has also crossed my mind if we're finally seeing fruits of browsers being better standardized on "95%"+ of the popular features -- and if writing a browser today is in fact easier than both writing AND maintaining a browser a decade back. While the web is of course still evolving, it feels more "settled in" than 10-15 years ago
This is definitely true! I've worked on browsers on and off since 2006, and it's a very different landscape today. Specs are better than ever and there's a treasure trove of tests available.
It's a simple Qt app that uses a text file for data storage. I wrote it after noticing that she had trouble remembering which shops are open when. I asked her what to call it, and she said "Gladiolus, like the flower" so I named it Gladiolus.
I can say for sure I've never had a more appreciative client as a programmer than the one user of Gladiolus :^)
Website implements HTML parser spec to tokenize and highlight its own source
Shadow: New browser engine made almost entirely in JavaScript
Branch/Call/Jump Compression
OpenTendo: Open-Source Hardware recreation of the original NES motherboard
Contributor Rewards with Polar
The Typographic Legacy of Microsoft [video]
Good bug reports & reduced test cases are always amazingly valuable. Perhaps you have a home page of your own? You can open it in Ladybird and see if you hit some problems. Maybe we throw a surprising JavaScript exception. Maybe our CSS layout isn't quite right.
If you can then reduce the problem to a minimal HTML/CSS/JS example, that's often enough for someone working on the engine to go ahead and find a fix pretty easily. :)
Over time, my audience grew, and some people really liked my videos, so I first made a Patreon and later a GitHub Sponsors for those who wanted to help me turn it into a full-time job someday.
Thanks to growing support, I was eventually able to make it a full-time job. For more details on this journey, I wrote about it here: https://awesomekling.substack.com/p/i-quit-my-job-to-focus-o...
We’ve also seen screenshots of Ladybird on FreeBSD, Haiku, and even Android at one point. Those are not maintained though, but we’ll come back to them eventually I’m sure :)
Indeed, all of these large sponsorships so far have been specifically for Ladybird development.
That’s also what I’ve been personally focusing on for many months already, so nothing really changes about my day-to-day.
The main new thing this enables is hiring more full-time engineers to work on the browser. (Still have details to figure out here though!)
That said, keep in mind that 99% of work on Ladybird also improves SerenityOS, since they are part of the same mega-project. :)
If you’d like a quick intro to the Ladybird project, I presented it at a conference earlier this month: https://youtu.be/De8N1zrQwRs
Huge thanks to Mike, Tobi and the other folks at Shopify who hooked this up. <3
If you’d like to know more about Ladybird, I did a presentation about it at the Web Engines Hackfest in Spain just two weeks ago: https://youtu.be/De8N1zrQwRs
Ladybird: Building a new browser from scratch [video]
I believe the industry is heading down a dark path with even big companies like Microsoft and Opera hiding behind Chromium instead of continuing to develop their own engines. IMO we need more independent implementations of the web platform to ensure that it remains open and healthy.
Re: too ambitious, it's a commonly held belief that building browsers is impossible without a huge budget and hundreds of staff. We're doing it anyway, it just takes time. :)
I applied for a grant once but never heard back. My goals may be too ambitious for some though, so no hard feelings :^)
With the lambda-only API, it's much harder to make this mistake, since a temporary reference like this will still go out of scope at the end of the lambda expression.
auto x = state.with([](auto& state) { return state.x; });
Becomes this: auto x = state.locked()->x;
But it also creates this very accessible footgun: auto& x = state.locked()->x;
Where it's way too easy to bind a reference to something that should be protected by the lock, but now isn't. So I'm not sure this is a great idea anymore.