- Aus einer persönlichen Erfahrung der Nachrichtenvermeidung entwickelte sich der Weg zu Tech-News, und nachdem sich angesichts sich wiederholender negativer Veränderungen ein Gefühl der Ohnmacht eingestellt hatte, fiel die Entscheidung, selbst einen Browser zu bauen
- Auf Hacker News tauchten immer wieder Entwicklungen auf wie unerwünschte Updates, steigende Abogebühren, Datensammlung, Diskussionen über ein Verbot von Verschlüsselung und Kontrolle über das Browser-Ökosystem
- Diesmal soll es nicht beim Ausweichen bleiben; stattdessen wird als Programmierer ein kleiner Gegenimpuls versucht, indem Code geschrieben und veröffentlicht wird
- Es wird als unwahrscheinlich angesehen, dass das Projekt fertig wird oder ein Mainstream-Browser wird; ohne Hilfe könnte es bald wieder eingestellt werden
- Die Hoffnung ist, dass ein nichtkommerzielles, offenes Browser-Projekt andere inspiriert und zu mehr alternativen Projekten führt
Wie Nachrichtenvermeidung zur Browser-Entwicklung führte
- Vor etwa zehn Jahren wurde auf häufigen Autofahrten zu Kunden in den Niederlanden oft Business News Radio (BNR) oder Radio 1 gehört, doch eines Tages wurde das Radio ausgeschaltet und danach bestand kein Wunsch mehr, wieder Nachrichten zu hören
- Es entstand der Eindruck, dass in den Nachrichten nur immer wieder schlechte Dinge wie Krieg und Korruption zu hören seien, und dass es als Einzelperson keine Möglichkeit gebe, diese Probleme zu lösen
- Danach wurden Nachrichtenhören, Nachrichtenschauen und das Durchstöbern von Online-Nachrichten vermieden; begann die 20-Uhr-Nachrichtensendung, wurde der Kanal gewechselt oder der Raum verlassen
- Wichtige Meldungen würden einen über andere Menschen ohnehin erreichen, daher wurden statt allgemeiner Nachrichten nur einige Subreddits auf Reddit und Tech-News in begrenztem Umfang verfolgt
Wiederkehrende Ohnmacht auch in Tech-News
- Tech-News wurden zu etwa 98 % über Y Combinators Hacker News verfolgt, doch mit der Zeit wurden die Gefühle wieder stärker, die zuvor schon bei allgemeinen Nachrichten vor zehn Jahren aufgekommen waren
- Zu den Problemen, die immer wieder auftauchten, gehörten unerwünschte Updates, gebrochene Versprechen, steigende Abogebühren, Firmenübernahmen und Versuche, noch mehr persönliche Daten zu sammeln
- Auch die Tendenz von Regierungen, unter Verweis auf Sexualstraftäter gegen Kinder Verschlüsselung verbieten zu wollen, wird als Teil desselben Problems gesehen
- Browser werden dabei als besonders wichtig betrachtet, weil fast alle Menschen weltweit einen großen Teil ihrer Zeit dort verbringen
- Wenn der Browser selbst Werbung anzeigt, könnten Adblocker, die Werbung auf Websites blockieren, nur schwer darauf reagieren
- Es gab Fälle, in denen Websites durch browserexklusive Erweiterungen in anderen Browsern schwer nutzbar wurden; wenn es wieder Wege gibt, Monopolprobleme zu umgehen, könnte sich das erneut wiederholen
Warum selbst bauen und warum die Erwartungen niedrig sind
- Diesmal wurde entschieden, nicht einfach nur auszuweichen, sondern als Programmierer selbst einen Browser zu entwickeln und den Code zu teilen
- Es gibt zwei Gründe, einen Browser zu bauen
- Ein Versuch, wenigstens auf sehr kleine Weise gegenzuhalten
- Der persönliche Wunsch, schon lange einmal selbst einen Browser zu bauen
- Die Erwartungen an das Projekt sind nicht hoch
- Es wird nicht erwartet, dass es fertig wird
- Ohne Mitstreiter könnte es bald sterben
- Es wird nicht erwartet, dass daraus ein dominanter Browser wird, der die bestehenden großen Browser verdrängt
- Gewünscht ist vielmehr ein Zustand, in dem das Projekt für nichtkommerzielle Zwecke offen ist und andere inspiriert, eigene Projekte zu starten
- Den Fortschritt des Projekts kann man in diesem Fortschrittsbeitrag auf codemusings.nl verfolgen
- Das Projekt-Repository befindet sich unter jaytaph/gosub-browser
1 Kommentare
Hacker-News-Meinungen
Ich bin der OP. Danke für die positiven, negativen und neutralen Kommentare. Ein paar Ergänzungen: Es stimmt, dass es bereits viele Browser-Projekte gibt, zu denen man beitragen kann, und dass das effizienter wäre. Aber dann bleiben am Ende nur ein paar Browser übrig. Ich möchte, dass es viele Browser gibt, damit die Leute eine Wahl haben.
Das ist ganz klar ein persönliches Projekt. Ich hätte es wohl auch angefangen, wenn ich nicht nur von der Tech-Branche die Nase voll gehabt hätte, aber ich bin wütend über das Gefühl der Ohnmacht, nichts ändern zu können, und das ist meine Art, etwas zu versuchen. Ich erwarte nicht, dass tatsächlich ein fertiger Browser entsteht. Ich hoffe, dass Leute meinen Code sehen und darüber lachen oder bessere Ideen daraus gewinnen. Wenn zum Beispiel die Algorithmen für den HTML5-Tokenizer und -Parser wie auf der WHATWG-Seite Schritt für Schritt erklärt sind, wird es für jeden einfacher, seinen eigenen HTML5-Parser zu schreiben. Wenn Google oder Microsoft auf Basis ihrer Marktmacht ein geschlossenes, eigenes HTML5-Format schaffen würden, etwa ghtml, wer könnte sie daran hindern? Der Grund, warum ich bei null anfangen will, ist, dass ich die technischen Schwierigkeiten ganz unten besser verstehen möchte.
Auch die Aussage über das Elend der „Nachrichten“ kann ich nachvollziehen. In der psychologischen Kriegsführung nennt man so etwas Zermürbung (sapping). Früher verbreitete der Feind Propaganda, um den Widerstandswillen zu brechen und Menschen machtlos zu machen; ein klassisches Beispiel war Lord Haw-Haw. https://en.wikipedia.org/wiki/Lord_Haw-Haw
Heute wirken Mainstream-Nachrichtenkanäle und Tech-Giganten so, als wollten sie Menschen in permanenter Verzweiflung und Angst festhalten. Auch der Tech-Diskurs fühlt sich an wie eine Grube aus Zynismus, Ausweichen, Verneinung, Resignation und erlernter Hilflosigkeit; ich habe in letzter Zeit viele Interviews und Sentiment-Analysen gemacht, und die Ergebnisse waren furchtbar. Es fühlt sich an, als würde das Wort „Tech“ selbst allmählich zu einem Synonym für „Widerstand ist zwecklos“. Nicht weil man Erfolg erwartet, sondern um ein Beispiel zu geben und den eigenen Verstand zu bewahren, überhaupt etwas zu tun, ist die positivste und menschlichste Reaktion.
In der Art von Linus Torvalds ausgedrückt: Wenn man es mit der Haltung macht „Ich will nichts Großes und Professionelles wie GNU bauen, sondern etwas für mich“, kann man mit viel weniger Aufwand viel erreichen. So kann man pragmatisch Kompromisse eingehen und kommt, ob zum Lernen oder für den echten Gebrauch, mit deutlich weniger Aufwand zu etwas, das einem selbst nützt, als wenn man ein „Produkt“ bauen würde. Bei meinen eigenen Projekten war es oft so, dass ich solche kleinen persönlichen Projekte entdeckt, Teile davon wiederverwendet und dann eine völlig andere Richtung eingeschlagen habe. Es ist viel einfacher, ein kleines Projekt zu nehmen, das „nah genug dran“ ist, als ein riesiges, voll ausgestattetes Biest zu verkleinern oder anzupassen. Die Komplexität von Browsern kommt zu einem großen Teil daher, dass sie jede Website und jedes Nutzungsszenario unterstützen müssen. Wenn man ihn aber für sich selbst baut, kann man sich darauf konzentrieren, dass die Sites, die einem wichtig sind, gut genug funktionieren, und das reduziert das Problem erheblich. Ich wünschte, mehr Leute würden sich an „unmögliche“ Projekte wagen. Auch wenn das Ganze nicht sofort für andere nützlich ist, können Teile davon nützlich sein, und manchmal entsteht wie bei Linux aus einem kleinen persönlichen Projekt etwas Größeres.
Wenn nur die Hälfte der Zeit, die Leute darauf verwenden, jemandes Projekt als nutzlose Zeitverschwendung zu bezeichnen, in konstruktive Arbeit fließen würde, gäbe es auf der Welt viel mehr coole und interessante Projekte. Es ist besser, an etwas Kühnen und Ambitionierten zu scheitern, als es gar nicht erst zu versuchen.
Man muss nicht jede Funktion eines modernen Webbrowsers implementieren. Dinge wie Battery API, Gamecontroller API oder USB braucht man nicht; man kann sich auf das Wichtige konzentrieren: HTML, CSS und JS. Selbst im schlimmsten Fall lernt man etwas Neues. Viel Glück mit dem Projekt.
„Ich erwarte nichts, ich erwarte auch nicht, dass ich es fertigstelle, ohne Helfer wird das Projekt bald sterben, und ich erwarte nicht, dass es ein dominierender Browser wird, der die großen Player des Marktes stürzt“ erinnert an die erste Linux-Ankündigung, die Linus auf comp.os.minix gepostet hat.
Sie begann mit „Hallo an alle, die minix benutzen. Ich arbeite an einem freien Betriebssystem für 386(486)-AT-Klone. Es ist nur ein Hobby und wird nicht groß und professionell wie gnu sein …“, erwähnte, dass bash und gcc portiert waren, dass innerhalb weniger Monate wohl etwas Praktisches entstehen könnte, und bat um gewünschte Features, ohne deren Umsetzung zu versprechen. Am Ende hieß es außerdem, dass keinerlei minix-Code enthalten sei, dass es ein multithreaded Dateisystem gebe, es aber nicht portabel sei und wahrscheinlich außer AT-Festplatten nichts unterstützen werde.
Niemand weiß, wie weit ein Projekt gehen wird. Und wenn man es aus eigenen Gründen macht, ist das in gewisser Weise auch gar nicht wichtig.
Eine so negative Stimmung auf HN gegenüber Browsern und dem offenen Web bin ich nicht gewohnt. Unabhängig davon, ob es gelingt, halte ich das für einen sehr wertvollen Versuch.
Selbst wenn am Ende nur ein halb fertiger Browser herauskommt, der nicht von den Motiven großer Tech-Konzerne getrieben ist, könnte er nützlich sein, falls irgendwann der Moment kommt, in dem wir aufhören müssen, von Firefox abhängig zu sein. Ich mag Firefox sehr und hoffe, dass dieser Tag nie kommt, aber mir ist klar geworden, dass mein Browser beim Zugriff aufs Web eine Art Engpass ist. Es gibt andere Websites, auf denen ich dieselben Inhalte ansehen kann, und andere Computermarken, die ich nutzen kann, aber dazwischen steht immer Firefox. Es gibt zwar andere Browser, aber die meisten scheinen auf Googlium zu basieren, oder wie auch immer es heute heißt. Deshalb wünsche ich viel Glück und Erfolg und werde den RSS-Feed abonnieren, um gelegentlich einen Blick auf das Projekt zu werfen.
Es gibt tatsächlich Belege dafür, dass es möglich ist. Ladybird wurde von Grund auf neu geschrieben, ursprünglich sogar inklusive eigener C++-Standardbibliothek, und nach drei bis vier Jahren Teilzeitarbeit läuft inzwischen sogar Discord, wenn auch langsam. Mittlerweile gibt es auch Vollzeitentwickler. GoSub scheint, wenn man sich
cargo.lockansieht, nicht alles von Grund auf implementieren zu wollen; Dinge wie Image-Decoder werden wahrscheinlich aus fertigen Komponenten kommen, sodass es das Potenzial hat, schneller zu wachsen.Heute bedeutet „einen Browser von Grund auf schreiben“ im Grunde, ein portables Betriebssystem in einer Box zu implementieren, also die Web-Plattform nachzubauen und sie mit dem kompatibel zu machen, was Google seinem eigenen Browser hinzuzufügen beschließt.
Browser haben einen riesigen Umfang an Funktionen und APIs, und es ist schwer, mit Googles ständigen Funktionsänderungen und seiner Dominanz Schritt zu halten; nicht einmal Microsoft hat das geschafft. Ein verwandtes persönliches Projekt ist Tersenet. https://github.com/runvnc/tersenet
Es ist eher ein Konzept mit fast keiner Implementierung, aber die Anforderungen wurden bewusst so gewählt, dass Menschen es implementieren können. Es ist deutlich weniger komplex als ein vollständiger Webbrowser. Es gibt auch eine zugehörige Diskussion mit GPT-4. https://chat.openai.com/share/16d02b78-f876-4c87-949a-a60b4f...
Ebenfalls relevant ist das tatsächlich existierende und praktische Gemini-Projekt. https://geminiprotocol.net/ Es hat die Tersenet-Idee inspiriert.
WebSQL, IndexedDB, Service Worker, WebGL, WebGPU, WebBluetooth, WebRTC und Ähnliches kann man einfach so behandeln, als gäbe es sie nicht. 99 % der echten Websites, also Seiten, die keine Web-„Apps“ sind, werden dadurch keine Funktionalität verlieren.
Persönlich fände ich es gut, wenn es neben der Monokultur aus Blink und seinem Verwandten WebKit sowie Gecko/Quantum noch weitere alternative Engines gäbe. Etwas, das die Rolle einnimmt, die KHTML vor der Aufnahme in WebKit hatte, oder einfach eine weitere Open-Source-Option, mit der man experimentieren kann.
Ich fände es gut, wenn sich die vielen Menschen, die dieser Idee zustimmen, auf eine Teilmenge einigen würden, die sie nutzen wollen; ich könnte auch mit einem Browser zufrieden sein, der nicht alles macht, was Googles Browser tut. Ich schalte mit uMatrix einen großen Teil der Google-Funktionen ab und setze
google.com-Domains nie auf die Allowlist, und nutze das geradezu als Beweis dafür, dass die Welt davon nicht untergeht. Die Zahl der Websites, die nicht funktionieren, ist vergleichsweise klein.Die große Mehrheit der Websites will sich nicht nach den Google-spezifischen, in letzter Zeit erfundenen Werbetechniken, AMP, DRM und Ähnlichem richten.
Vielleicht sollten Mozilla und andere eine unabhängige JavaScript-„VM“ bauen, die alle verwenden können.
Als jemand, der überhaupt nicht wusste, wie ein „echter“ Browser funktioniert, sich aber trotzdem entschieden hat, selbst einen Browser zu schreiben, inklusive eigener Layout-Engine, möchte ich einfach sagen: Mach es.
Zu sehen, wie eine Website durch den eigenen Code gerendert wird, ist extrem befriedigend, egal wie chaotisch der Code oder die Ausgabe ist. Mein Projekt ist etwa zweieinhalb Jahre alt und rendert inzwischen HN und einfache Blogs einigermaßen. Ob es objektiv besser ist als w3m, das ich ursprünglich ersetzen wollte? Nicht unbedingt, deshalb kehre ich für manche Aufgaben noch zu w3m zurück. Trotzdem nutze ich es für Aufgaben, an die ich nie gedacht hätte, habe viel über Programmierung gelernt, und es ist einfach cool, dass es überhaupt funktioniert. https://sr.ht/~bptato/chawan
Einen Browser zu bauen bedeutet, eine Rendering-Engine und eine Layout-Engine zu bauen. Das ist nicht unmöglich, aber eine ziemlich große Aufgabe.
Es gibt aber auch viele Dinge, die eher Früchte tragen können. Man könnte Servo auf den Nyxt Browser portieren oder WebKit/Servo/Gecko forken und die in den letzten zehn Jahren von Werbefirmen injizierten, für Nutzer schädlichen invasiven Webstandards entfernen. Wenn das ohnehin Dinge sind, die man beim Neubau von Grund auf erledigen müsste, ist es besser, nicht ganz unten anzufangen, sondern bei einer bestehenden Community, die bereits zur Zusammenarbeit bereit ist.
Gecko kommt der Definition eines Monolithen sehr nahe, sodass es unmöglich ist, die Angriffsfläche zu entfernen, und selbst Tor verwendet eine miserable Stub-Ersetzungsstrategie, die bei jeder Änderung interner APIs oder Bridges kaputtgeht. Allerdings ist es unmöglich, allein mit Upstream Schritt zu halten, daher braucht es Contributors und Maintainer. Aus Cybersecurity-Sicht habe ich die Angriffsfläche so weit wie möglich dokumentiert und notiert, was noch zu tun ist und was letztlich entfernt werden muss. https://github.com/tholian-network/retrokit/blob/main/SECURI...
Ich möchte RetroKit als WebView für mein Browser Stealth verwenden, daher kann das ziemlich subjektiv sein. Browser Stealth funktioniert als Filter-Proxy, Scraper und dezentraler Cache. https://github.com/tholian-network/stealth Es wird derzeit in Go neu geschrieben.
Sie muss mit Text-Layout-Engines wie https://github.com/pop-os/cosmic-text kombiniert werden und unterstützt noch nicht alle Funktionen. Typische derzeit fehlende Funktionen sind
float,display: inline-block,box-sizing: content-boxundposition: static. Block, Flexbox und CSS Grid werden aber unterstützt, und es kommt noch mehr hinzu.Es ist zwar eine große Sache, aber nicht unbedingt das Unmöglichste für ein kleines, engagiertes Team.
Man kann damit anfangen, halbwegs einfache HTML-Websites zu rendern, muss sich nicht beeilen, und es gibt keine strenge Regel, dass jeder Winkel des Standards implementiert werden muss. Webbrowser und das Web sind herrlich menschlich.
Man kann bestehende Engines nehmen, sie verbinden und so modularisieren, dass man sie jederzeit austauschen kann, und es ist immer noch ein richtiger Browser. Persönlich habe ich den Eindruck, dass sich die Leute hier zu sehr auf das innere Räderwerk konzentrieren; tatsächlich braucht es neben Rendering/Layout/Scripting auch bessere Interfaces und andere Komponenten.
Ich drücke die Daumen. Mach weiter.
Ich habe einen sehr kleinen Teil des ORC-Solver-Algorithmus in Python implementiert und wxWidgets fürs Rendering verwendet. Um Textbreiten zu berechnen, habe ich die Text-Extent-API von wxWidgets genutzt. Das ORC-Solver-Whitepaper ist hier. https://yuejiang-nj.github.io/Publications/2020CHI_ORCSolver...
Ich überlege, wie man Branch and Bound implementieren könnte, und fände entsprechende Informationen hilfreich. Für Satzalgorithmen sollte man sich wohl die TeX-Codebasis ansehen, und für Layout-Bin-Packing war es auch sehr interessant, die JavaScript-Bibliothek Masonry zu verwenden.
„Wenn ihr mein HTML wollt, gebe ich es euch! Sucht danach! Alles auf dieser Welt habe ich dort zurückgelassen.“
„So machten sich die Hacker auf, ihrem Traum folgend zur HyperText Line, und die Welt trat in das wahre Große Browser-Zeitalter ein!“
Jahrelang glaubte ich, Browser seien ein unüberwindbarer Berg, aber inzwischen scheinen immer mehr Menschen zu glauben, dass wir es schaffen können. Meine Zwei-Sekunden-Analyse: Diese Strömung ist sichtbar, weil die neuen Browser-Macher nicht die bestehenden riesigen Monster nachahmen und mit ihnen konkurrieren wollen, sondern das Web verändern wollen. Das gefällt mir.
Was den politischen Teil des Beitrags angeht: Die Welt ist kaputt, und nur kaputte Nachrichten zu lesen, ist ermüdend. Sich aber von der Realität abzukoppeln und „unpolitisch“ zu werden, heißt aus meiner Sicht, die Menschheit aufzugeben – also die eigenen Kinder und Nichten/Neffen sowie die Kinder der engsten Freunde aufzugeben.
Man muss nicht gleich die Welt verändern; kleine Veränderungen in der eigenen Community reichen schon. Gerade als Coder können die Dinge, die wir bauen, Tausende Menschen weltweit beeinflussen und ihre Richtung ändern. Ich frage mich manchmal, ob die Lage anders wäre, wenn alle nur 3–5 % ihrer Zeit in Unterstützung der Community und irgendeine Form von Aktivismus investiert hätten.
Nichts, was ich in den Nachrichten lese, würde ändern, wie ich wähle – dabei wäre das eigentlich der beste Grund, Nachrichten zu verfolgen.
Anders gesagt: Ich habe die Welt aufgegeben. Aber die Kinder anderer Leute sind nicht meine Verantwortung. Ich tue so viel wie andere, um „das Richtige“ zu tun, aber nicht mehr. Früher habe ich mir über solche Dinge Gedanken gemacht, versucht, meinen persönlichen Fußabdruck zu reduzieren, und über Nachhaltigkeit und künftige Generationen nachgedacht, aber ich habe die Hoffnung verloren. Es fühlte sich an, als würde man gegen die Strömung kämpfen. Jetzt versuche ich nur noch, meinen Fußabdruck nicht größer als den Durchschnitt werden zu lassen und gut zu den Menschen um mich herum zu sein.
Wenn Rust zwingend ist, wäre es vermutlich hilfreicher, zu Servo beizutragen und mit kleinen PRs zu lernen. https://github.com/servo/servo
Allerdings kann ich es verstehen, weil ich selbst schon Projekte „von Grund auf“ gemacht habe, weil ich eine bestehende Codebasis schwer lesbar fand oder dachte, ich könnte es besser. Jeder hat eben seine eigene Art.
Ebenso wurde Servo dafür entworfen, Teile des Firefox-Browsers zu ersetzen, und musste deshalb in „Gecko-förmige“ Lücken passen. Zum Beispiel werden an mehreren Stellen UTF-16-Strings verwendet, um mit dem Rest von Firefox kompatibel zu sein. Heute könnte man Servo vielleicht mit modernem Rust neu schreiben und es kleiner, schlanker und vielleicht schneller machen.