How I built my own browser
kilianvalkhof.com
kilianvalkhof.com
Next up: how I painted my own Impressionist masterpiece, starting with nothing but a high-resolution camera, access to a museum, and an inkjet printer; how I wrote my own operating system, starting with nothing but Linux (ahem, https://gitlab.com/kragen/bubbleos doesn't have a kernel yet); how I built my own sports car, starting with nothing but a Lamborghini.
Claiming that you've written "a new web browser" because you've stuck your own URL bar and tabs on Blink is absurdity bordering on fraud, like claiming that Shiva Ayyuradai "invented email", that tempered glass ovenware is "pyrex", that physics and chemistry are "not philosophy", that submicron gold particles are "nanotechnology", or that Ayn Rand is "a philosopher". It's the kind of claim that can only survive by redefining a decades-old term to mean something much more trivial.
I'd consider Beaker Browser (https://beakerbrowser.com/) to be its own browser even though it's "just" an Electron app. Brave is another example: it's "just" Chromium. Or Firefox and Chrome on iOS: just Webkit wrappers.
You can come up with your own completely novel UI on top of a browser that is indistinguishable from "your own browser" to the end-user. Mincing words with implementation detail just seems like a tired "well actually" HN gotcha.
The Beaker Browser actually supports other protocols than just HTTP(S). I think it's fair to be frustrated that the person in question didn't implement the engine at the core of it.
That being said, I disagree with the criticism in the parent poster -- the interface seems to be sufficiently novel enough to warrant interest.
> You can come up with your own completely novel UI on top of a browser
Not if it's Blink or WebKit; they want to draw stuff with pixel-perfect control.
> that is indistinguishable from "your own browser" to the end-user
In https://news.ycombinator.com/item?id=22359642 I list 10–12 ways that even Beaker or Brave are distinguishable from "your own browser".
In what way does the browser in the article not offer new functionality? The entire reason it exists is to offer functionality not found in typical browsers.
The chrome is what makes it a “browser” — ya know the tooling that’s lets you browse web pages with a url bar, keyboard shortcuts, tabs, windows. The thing that people have extremely strong preferences about and are what constitutes almost the entire identity of a web browser.
“How I build my own file manager with nothing but a filesystem.”
Only when they claim it's their own web browser, because that's a claim that deserves ridicule. Experimenting with the chrome on browsers is a praiseworthy and worthwhile activity, just different from writing new browsers.
> The chrome is what makes it a “browser” — ya know the tooling that’s lets you browse web pages with a url bar, keyboard shortcuts, tabs, windows. The thing that people have extremely strong preferences about and are what constitutes almost the entire identity of a web browser.
I don't think so, no. Some interesting differences between browsers might include:
1. Is it compatible with Slack?
2. How many megs of RAM does it need to run Slack?
3. Does it pass the ACID test? (Substitute modern equivalents.)
4. Does it support current ECMAScript, or does it require me to recompile my code to an older version?
5. Is it vulnerable to Google inserting malicious code into the next version to remove functionality I depend on?
6. Does it include the vulnerable code in the CVE that was just disclosed in WebKit, or am I safe without risking an upgrade?
7. Can I run it in a terminal?
8. Can I recompile it for the 68000?
9. Does it have new, possibly experimental features like freezing the execution of a page to save battery, WebAssembly, the Tcl/Tk plugin, PDF rendering, TeX rendering, or SQLite access?
10. How fast is it?
11. How well is it protected from cross-site cookies and paywalls?
12. Can it archive the version I'm looking at of this page, or am I vulnerable to the New York Times silently editing their article after the fact?
13. What protocols can it access data over — can it do Gopher, dat:, or BitTorrent?
All of these except #13 have everything to do with the browser engine and nothing to do with what the URL bar looks like. There must be some people whose preferences about their browser's keyboard shortcuts are stronger than their preferences about things like whether it runs the web apps they need to use, but I haven't met any of them.
It is a web browser! The name Google Chrome is play on the fact that it used to be "Google's chrome on WebKit."
The actual UI for the browser is where all the interaction is! Saying that the chrome for a web browser is "what the URL bar looks like" is absurd. All of the differentiating features of web browsers are in the chrome -- bookmarks, extensions, shortcuts, sync, profiles, container tabs, sidebars, application windows, developer tools, search.
It's not true that those minor details are the things that distinguish actually different web browsers, such as Gecko (to clarify that I'm not talking about iOS "Firefox"), IE7, IE8, IE9, WebKit, Blink, Konqueror, Lynx, Links, Dillo, Netscape 3, Netscape 4, and so on. Yes, there's a fuzzy line: were early versions of Chrome "the same browser" as Safari (because they used WebKit) or "different browsers" (because they had their own JS engine)? Different browsers, I think, but it's debatable. Were Firefox 3 and Firefox 45 "the same browser" or "different browsers"? The same browser, I would say. But the existence of gray areas like that doesn't mean that there are no black and white cases, like this one.
Did I mention I'm an accomplished musician, capable of playing world-class music in many different styles? My favorite instrument is the CD player, although sometimes I also play the MP3.
The average user does not care one bit about the rendering engine, and likely doesn't even conceive of their browser having that moving part. That's the whole reason why "browser" and "rendering engine" are not the same thing, because one is the application and the other is just a single component of a larger application. If Firefox switched to Servo but left everything else the same, nobody is going to demand they rename the browser, because only a single component was changed. The entire rest of the browser would be intact and still identical in form and function.
The amount of conflation of rendering engine and browser application in this HN thread is unbelievable.
2. Chrome users will definitely notice if you give them Chrome but with Elinks or Dillo for rendering. Also, upthread I listed 12 differences Chrome users might notice with Gecko; although they might not, for example, understand why their browser was using so much less RAM, they would definitely notice the difference.
It's not actually about building a browser. What it is about is building an MVP (perhaps unwittingly), scratching your own itch, iterating based on feedback from early adopters, and discovering a niche where there's a lot of value waiting to be unlocked. If only everyone approached building products this way.
Reading the article invoked the sense of wonderment and fun that originally drew me to programming/software development.
Reading the comments on here did nothing but trigger my PTSD and flare up my anxiety. How is it people can be so pedantic and... mean? I don't know what else to call it when someone finds the the time to sit down and write comments that are hundreds of words long that do nothing but tear apart the creations of another person.
Would these commenters also take joy in attending children's science fairs, pointing out that none of them truly discovered anything because they gleaned it all off of books and the internet?
It's such a toxic, unproductive attitude. If even a fraction of the energy that went into writing vile comments on HN was spent writing code, maybe we would have one of these fancy new rendering engines half the people in here are raising hell about.
20 years ago I put a browser together with 5 clicks using Delphi and gave it away for free, dude.
Why do you think he didn't build a browser?
Building a control around a render is still neat, but it's not baking the thing from scratch.
I think part of the pushback in these comments is that as devs and hackers, a lot of us want to see new rendering engines. Even if they're basic or just render web data differently, it'd be a good change from the narrowing and limited web rendering landscape that's out there.
To me this feels like like getting a free cheeseburger, adding a leaf of spinach to it, and then saying you built a cheeseburger. But hey, maybe you want a cheeseburger with spinach, and you don't care whether other people think they "built" the cheeseburger or not.
... is a gigantic amount of work, indeed.
>like getting a free cheeseburger, adding a leaf of spinach to it
If that cheeseburger was the size of an office building, and your spinach leaf was particularly small.
It is a webkit fork (not electron) that allows you to run ruby in your browser. Hasn't been updated in a while but it used to work.
Unrelated: I was saddened to see on your website that Guitaryst was no longer around! Thank you again for your early support at Djangy ;)
Too bad about using Electron, but I guess I understand why that choice was made.
The renderer is the hardest part to build, so I'm looking at using an already-established OSS one. Fortunately, I don't need anything fancy in the renderer, so there are plenty of OSS options I can use.
It's like saying you built your own operating system than in reality is just another Linux distribution.
“Making a browser” like this dates back to the early days of internet explorer - windows provided an explorer view (I can’t recall the api name, and it was activex!). But it was fairly close to drag and drop browser creation.
There was an old demo for WebKit where you could make a browser literally with nothing but drag and drop (cocoa bindings made this possible).
I did what you're talking about in the 90's with VB, I thought it would be neat to have a browser with two side by side views. I was learning to write HTML at the time and I found it useful for comparing two versions of the same page.
I think the whole thing had less than 20 lines of code and most of the code had nothing to do with the browser controls accept resizing them when the window size changed.
Anyway, the headline made is sound a lot more exciting but what he's done is still pretty cool. And I like the fact that the reason he did it was so similar to mine, albeit he did it a lot better!
You can still do something similar in Windows and sometimes it is nice. (I also believe the JDK has a browser component if you want to go cross platform.)
At some point I considered joining together a web view, an embeddable vnc viewer component and some menus to create the perfect tool for the most stupid job I ever held (think manually copy-pasting data into reports that no one ever read but that still had to be completed because of contractual obligations. The only good thing was that it was unbelievably well paid.)
Congrats for building something and putting it out there! It doesn't matter that it's not great (or technically interesting). If it provides value to someone, then you did a good job.