Show HN: Resurrecting the Dillo browser (dillo-browser.github.io)
[0]: https://news.ycombinator.com/item?id=32448104
I felt sad as I didn't want it to die, so I got a copy of the repo from my hard disk, uploaded it to GitHub and decided to do some maintenance on the code to at least keep the build working. After some time, the folks at Atari Forum decided to use my repo to port it to the Atari platform and they managed to do it [1].
[1]: https://github.com/dillo-browser/dillo/issues/34
That gave me some motivation to work a bit more on the project to prevent it from dying. So I created an organization under the name of "dillo-browser" and made a new webpage [2] with a backup of the old one.
[2]: https://dillo-browser.github.io/
With the help of Andreas Kemnade which had access to the original server, we managed to backup most of the stuff from the original website (including non-reachable pages) which I uploaded to the Archive.
In the meanwhile, I combined the support for both OpenSSL (1.1 and 3) and mbedTLS (2 and 3) as well as proper CI with rendering tests. We now build Dillo for Ubuntu, FreeBSD and macOS!
I also became familiar with the plugin mechanism in Dillo, which allows any program that uses the standard input and output to become a plugin registered to a given protocol (like file://...). I did a simple one (which is just a bash script) to read local manual pages which is handy to follow links to other pages [3], but check also the ones Charles E. Lehner did which are more advanced [4].
[3]: https://github.com/dillo-browser/dillo-plugin-man [4]: https://groups.google.com/g/dillo/c/WGEMg7AXN4o/
As of today, I'm unable to contact the main developer, Jorge Arellano Cid, which has not interacted with the mailing list for some years now. Jorge, if you read this, please contact with me (you can find my email in the git commits).
Regarding the future of Dillo, I'm planning to (finally) do the 3.1 release after some testing, and for that it would be convenient to have the help of some users to get some feedback ;-)
If you want to contribute, feel free to open a PR or send a patch (via GitHub or by email, I don't care). Check also the current issues and pull requests to see what is pending or already being working on. I will probably setup a mailing list at some point too.
Thanks! Rodrigo.
178 comments
[ 3.6 ms ] story [ 232 ms ] threadDillo is handy to have on lower specced machines. I've used it on m68k. I really should see why it doesn't compile on VAX, though...
Thanks!
see https://news.ycombinator.com/item?id=32809126
On Gemini, there's the Lagrange browser, and gemini://gemi.dev with a nice set of services too.
https://github.com/crossbowerbt/dillo-plus
https://github.com/crossbowerbt/dillo-plus#gopher-and-gemini...
Edit: Newline formatting. Edit 2: Wording (port not fork).
https://git.scuttlebot.io/%25n7g%2BJlKZjPV6CRfSQL5YUWk%2BxYg... https://github.com/boomlinde/gemini.filter.dpi https://celehner.com/projects.html#dillo-plugins
What's the minimum compiler you target? Any big long term plans? Fuzzing? Moving to 'modern' build system like CMake?
> What's the minimum compiler you target?
I didn't defined any (yet), but shouldn't be too hard to add to the CI.
> Any big long term plans?
First preventing it from dying and getting removed from distros. Then it depends of how much free time I can dedicate to it, but at least maintaining it.
> Fuzzing?
I would say first adding some of the other browser tests suites. That should catch a lot of rendering issues. But yeah, fuzzing would be interesting, specially for the custom HTML and CSS parsers.
> Moving to 'modern' build system like CMake?
Yes, I had to modify the configure.ac and that was very painful, specially targeting a lot of platforms. It is also broken for cross compilation. I have to check also how is the support for cmake in other systems, so we can safely remove Automake and friends. But I didn't want to introduce any big changes before 3.1 is released.
Wouldn't a project such as this one be a perfect candidate for Cosmopolitan?
> Cosmopolitan Libc makes C a build-anywhere run-anywhere language, like Java, except it doesn't need an interpreter or virtual machine. Instead, it reconfigures stock GCC and Clang to output a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS on AMD64 and ARM64 with the best possible performance.
https://justine.lol/cosmopolitan/
I used to use dillo on my main desktop too, for browsing documentation that wasn't too heavy on CSS - having 20 to 40 tabs open would gobble up a lot of RAM in Firefox, whereas dillo happily stayed around 100MB no matter what I threw at it. My current desktop has enough RAM this not a concern any more, but I have fond memories of using dillo on memory-deficient machines and am a current user still.
Also, the lack of a Javascript engine makes it a very secure browser. Whenever I try to open a link that I am suspicious of, I do so in dillo.
So thanks to everyone who continues to work on this, I really appreciate the work you do! Dillo is a fine piece of software that I have enjoyed using for at least 15 years now, and I hope it will be around for many years to come! <3
This is precisely the objective Jorge had in mind, so people on other parts of the world with less capable machines where still able to access the web.
While I was in university, I was using an old Pentium 4 at home (which I still use) which couldn't open a single tab unless you wait around 30 seconds for it to load. So I was mostly using Dillo and failing back to Google cache and then Firefox to read something that required Javascript.
I used it for years and it always was super fast. Also, my network connection was not very fast, so loading only the HTML helped a lot.
> So thanks to everyone who continues to work on this, I really appreciate the work you do! Dillo is a fine piece of software that I have enjoyed using for at least 15 years now, and I hope it will be around for many years to come! <3
Thanks :-)
Hah! I used an old Dell laptop that had a 1400x1050 (?) screen for this exact purpose with Dillo.
I was so mad that software stopped using Windows help files...they were so much more efficient!
Are you referring to HTML Help? I believe they rendered those with Internet Explorer; I'm willing to bet they still do for backwards compatibility.
I would suggest using a Chromium or Firefox profile with JavaScript and webfonts disabled for this instead of questionably maintained C software that doesn’t have a sandbox for any of the complex and commonly exploited things it does (image decoding, HTML/CSS parsing, network protocols, local file access).
running dillo in a bubblewrap container would probably be fine and not eat all of your available resources.
[i got my 60k loc number from running tokei in the dillo repo, doing the same in the gecko repo took multiple minutes and pegged 8 cores at 100%, might be a bug in tokei or maybe 21 million lines of code is just enormous]
Source: https://stallman.org/stallman-computing.html
[1]: https://groups.google.com/g/dillo/search?q=javascript
However, I don't think the machines that Dillo is targeting would benefit from adding support for it and it would increase a lot the surface for security problems. Maybe my advise would be to use another browser if you have the computing power to run JS.
People tend to overestimate the resources required to run JS and have a miscalibrated sense of how slow they can/should expect it to be.
Firefox 1.x and 2.0 worked on machines with substantially worse specs than many of the ones that people are mentioning here (think: sub-GHz PIIIs with 128–256 MB of RAM), and substantial parts of Firefox itself are written in JS.
I haven't checked, but I'd bet that 2024-era QuickJS is also faster than 2004-era SpiderMonkey at executing the same script.
I was using dillo heavily at the time, when we didn't mind differences in rendering. After that I switched to konqueror. As the dhtml/js craze exploded, I caved in to ff when more often than not the websites didn't load or work as expected.
https://github.com/w00fpack/dilloNG
What’s your approach to browser dev? Do you prefer to go wide or deep, for example the Ladybird project goes “deep” in that they choose an endpoint and try to get everything on the page working and whatnot. Maybe I’m rambling, but very cool!
https://celehner.com/projects.html#dillo-plugins
I already talked with him about keeping a copy of them in GitHub under the dillo-browser organization.
> and if you're interested I can zip them up and send it to you to be forked and worked on the project
Feel free to open an issue and upload it there, so we can keep a copy of the zip. Thanks!
Nice, lean & mean! I'm interested.
I would say that the plugin system is one of the things makes Dillo a bit different.
I had some ideas to do performance tests and also check how well the rendering engine works with choppy connections (while content is still slowly downloading), but I didn't do any tests yet.
There were some very old results against firefox comparing memory usage in the old page [1].
[1]: https://dillo-browser.github.io/old/memory.html
For a short description of what w3m local CGI scripts can do:
* They can be used for implementing a man page viewer, as in w3mman. It seems Dillo has a similar plugin[1].
* w3m's bookmark system is implemented using local CGI; it seems Dillo's bookmarks are implemented as a dpi plugin too.
* w3m can use urimethodmap + local CGI to implement additional protocols. I guess DPI can do that too? (At least the custom man: scheme in dillo-plugin-man seems to indicate it can.)
I had no idea any browser supported this besides w3m. I mostly imitated w3m's design in my own project (which includes the twist that support for every protocol, including HTTP, is implemented on top of a similar plugin system); I guess I have a second reference point now :)
[0]: https://dillo-browser.github.io/old/dpi1.html
[1]: https://github.com/dillo-browser/dillo-plugin-man
Yeah, a lot of things [1] are implemented as DPI in Dillo. Some of the plugins implement "websites" like file:, vsource: and ftp: but others implement other features like the handling of cookies, downloads or bookmarks. As they are a different process, if you close the browser, the downloads continue.
[1]: https://github.com/dillo-browser/dillo/tree/master/dpi
> * w3m can use urimethodmap + local CGI to implement additional protocols. I guess DPI can do that too? (At least the custom man: scheme in dillo-plugin-man seems to indicate it can.)
Yes, there is a file (~/.dillo/dpidrc) that associates the protocol to the plugin binary (like this "proto.man=man/man.filter.dpi"). There is also gemini: gopher: and even git: available as external plugins.
> I had no idea any browser supported this besides w3m. I mostly imitated w3m's design in my own project (which includes the twist that support for every protocol, including HTTP, is implemented on top of a similar plugin system); I guess I have a second reference point now :)
In fact, not so long ago, the HTTPS protocol was implemented as a DPI plugin, but it was changed to be part of the browser.
My only complain is that it keeps asking to confirm new keys every time a new server is visited which causes a lot of friction to explore several gemini servers. I understand that is a tradeoff between usability and security, but I wish there was a better solution than that.
For now I uploaded Charles plugin written in shell script[1], which always trusts the certificate.
[1]: https://github.com/dillo-browser/dillo-plugin-gemini/
But I'm considering switching to the Go version if I can find a way to improve the UX.
Also, I kindly ask you to add the tag "dillo-plugin" so you can make Dillo plugins easily discoverable by searching for the tag in GitHub[2].
[2]: https://github.com/topics/dillo-plugin
> I believe that in recent versions of Dillo, even https is implemented as a DPI plugin.
This was done initially[3] (before 2007) but it was moved to the browser itself[4] in 2016.
[3]: https://github.com/dillo-browser/dillo/commits/afd2763caa56d...
[4]: https://github.com/dillo-browser/dillo/commit/bf5a7783f4a192...
Hmm, yeah, it's a trade off. It never annoyed me personally so I haven't given it much thought, but I could add some means to configure this behavior. There should be a commit shortly.
I've been meaning to change how it behaves when the certificate differs from the pinned one as well, because as it is now you manually have to remove the old pinned certificate from the file system when a certificate is replaced, which isn't great but at least should happen much less often.
> Also, I kindly ask you to add the tag "dillo-plugin" so you can make Dillo plugins easily discoverable by searching for the tag in GitHub[2].
Thanks for the heads up! Done.
> This was done initially[3] (before 2007) but it was moved to the browser itself[4] in 2016.
I see, so I had the chronology mixed up :).
Anybody knows what happened to Jorge A. Cid?
https://tourtenisquinta.cl/site/perfil?id=763
https://github.com/dillo-browser/dillo-browser.github.io/pul...
[1]: https://dillo-browser.github.io/old/css_compat/index.html
Here [2] is the original development plan, which was focused on making the floating elements work well, but the main developer of that area, Sebastian, sadly passed away.
[2]: https://dillo-browser.github.io/old/Plans.html
I'm planning to add better support for the most common attributes that break the layout the most (margin: auto) and also keep a proper table of the support status.
> Lower the barrier of entry to the web.
> Support old or small machines and slow connections.
Ram is cheap today, unfortunately the industry isn’t very humanitarian so they took advantage of that.
Now as the world expects fluent animation and eye candy, it’s virtually impossible to have a browser support as many sites as chrome and support older machines.
How so? A lot of websites rely upon animations (I'm guessing you're referring to more advanced CSS support here), yet people still use browsers like w3m, elinks, lynx, etc.
If anything, I'd imagine the information density would be much greater with something like Dillo: you'd have much less distracting (as you put it, "eye candy") to draw attention away from the text on the page, which is most certainly welcome IMO.
[1]: https://sources.debian.org/src/gzilla/0.1.5-3/bytesink.doc/
PS: Maybe you could give us a hand contacting Jorge :-)