- Una experiencia personal de evasión de noticias terminó derivando en noticias tecnológicas, y tras sentirse impotente ante cambios negativos repetidos, decidió crear un navegador por cuenta propia
- En Hacker News se topó una y otra vez con tendencias como actualizaciones no deseadas, aumentos en las suscripciones, recolección de datos personales, debates sobre prohibir el cifrado y control del ecosistema de navegadores
- Esta vez, en lugar de solo evitarlo, intenta una pequeña respuesta como programador: crear código y publicarlo
- Reconoce que es poco probable que el proyecto se complete o se convierta en un navegador dominante, y que podría abandonarse pronto si no recibe ayuda
- Espera que un proyecto de navegador abierto y no comercial inspire a otras personas y lleve a más proyectos alternativos
Cómo la evasión de noticias terminó llevando al desarrollo de un navegador
- Hace unos 10 años, mientras iba seguido en auto a visitar clientes, escuchaba Business News Radio (BNR) o Radio 1 de los Países Bajos, pero un día apagó la radio y ya no quiso volver a escuchar noticias
- Sentía que en las noticias solo se repetían cosas malas como guerras y corrupción, y veía que, como individuo, no tenía forma de resolver esos problemas
- Desde entonces evitó escuchar noticias, verlas o buscarlas en internet; cuando empezaba el noticiero de las 8, cambiaba de canal o salía de la habitación donde estuvieran puestas
- Considera que las noticias importantes de todos modos le llegan a través de otras personas, y en vez de noticias generales solo consume de forma limitada algunos subreddits de Reddit y noticias tecnológicas
La misma impotencia se repitió también en las noticias tecnológicas
- Recibía alrededor del 98% de las noticias tecnológicas a través de Hacker News de Y Combinator, pero con el tiempo volvió a crecer la misma sensación que había tenido 10 años antes con las noticias generales
- Los problemas que veía repetirse eran actualizaciones no deseadas, promesas rotas, aumentos en las suscripciones, adquisiciones empresariales e intentos de recolectar aún más datos personales
- También considera que la tendencia de los gobiernos a querer prohibir el cifrado con la excusa de los delincuentes sexuales que involucran menores forma parte del mismo problema
- Los navegadores se vuelven un objetivo especialmente importante porque son el lugar donde casi todo el mundo pasa tiempo
- Si el propio navegador muestra anuncios, podría ser más difícil que los bloqueadores de anuncios que bloquean la publicidad de los sitios puedan responder
- Ya hubo casos en que extensiones exclusivas de cierto navegador dificultaban usar sitios en otros navegadores, y cree que si aparece una forma de evitar los problemas de monopolio, eso podría repetirse
Por qué decidió hacerlo él mismo y por qué sus expectativas son bajas
- Esta vez, en vez de limitarse a evitarlo, pensó que como programador podía desarrollar directamente un navegador y compartir el código
- Tiene dos motivos para crear un navegador
- Intentar empujar de vuelta, aunque sea de una manera muy pequeña
- La razón personal de que desde hace tiempo quería intentar hacer un navegador por sí mismo
- No tiene grandes expectativas para el proyecto
- No espera que se complete
- Cree que podría morir pronto si no aparece gente que ayude
- No espera que se convierta en un navegador dominante capaz de derribar a los grandes navegadores existentes
- Lo que espera es que quede abierto con un propósito no comercial, y que otras personas se inspiren para crear sus propios proyectos
- Se puede ver el avance del proyecto en la publicación de progreso en codemusings.nl
- El repositorio del proyecto está en jaytaph/gosub-browser
1 comentarios
Opiniones de Hacker News
Soy el OP. Gracias por los comentarios positivos, negativos y neutrales. Para agregar algunas cosas: es cierto que ya hay muchos proyectos de navegadores a los que se puede contribuir y que eso sería más eficiente, pero entonces quedarían solo unos pocos navegadores. Yo quiero que haya muchos navegadores, para que la gente tenga opciones.
Esto claramente es un proyecto personal. Lo habría empezado aunque no fuera solo por estar harto de la industria tech, pero me enoja la impotencia de no poder cambiar nada, y esta es mi forma de intentar hacer algo. No espero que llegue a completarse un navegador real. Me gustaría que la gente vea mi código y se ría, o saque mejores ideas. Por ejemplo, si el algoritmo del tokenizador y el parser de HTML5 estuviera explicado paso a paso, como en el sitio de whatwg, sería más fácil para cualquiera escribir su propio parser de HTML5. Si Google o Microsoft usaran su dominio del mercado para crear un HTML5 personalizado de formato cerrado, por ejemplo algo como ghtml, ¿quién podría impedirlo? La razón por la que quiero empezar desde cero es que quiero entender mejor las dificultades técnicas de base.
También me identifico con lo que dices sobre la miseria de las “noticias”. En guerra psicológica, a esto se le llama desmoralización (sapping). Antes, el enemigo hacía propaganda para quebrar la voluntad de resistir y dejar a la gente impotente; un ejemplo clásico fue Lord Haw-Haw. https://en.wikipedia.org/wiki/Lord_Haw-Haw
Hoy parece que los canales principales de noticias y los gigantes tecnológicos intentan mantener a la gente atrapada en una desesperación y ansiedad permanentes. El discurso tecnológico también parece un pozo de cinismo, evasión, negación, resignación e indefensión aprendida, y tras hacer muchas entrevistas recientes y análisis de sentimiento, los resultados fueron espantosos. Siento que la palabra “tech” en sí misma se está volviendo sinónimo de “resistir es inútil”. Hacer algo, no porque esperes tener éxito sino para dar el ejemplo y conservar tu propia cordura, es la respuesta más positiva y humana.
Para decirlo al estilo de Linus Torvalds, cuando lo haces con la actitud de “no intento hacer algo grande y profesional como GNU, sino algo para mí”, puedes lograr mucho con mucho menos esfuerzo. Así puedes hacer concesiones pragmáticas y llegar a algo que te sea útil, ya sea para aprender o para usar de verdad, con mucho menos esfuerzo que al crear un “producto”. Muchos de mis proyectos personales también terminaron yendo en direcciones totalmente distintas después de encontrar pequeños proyectos personales de este tipo y reutilizar partes. Es mucho más fácil tomar un proyecto pequeño que esté “lo suficientemente cerca” que reducir o adaptar una bestia enorme y llena de funciones. Gran parte de la complejidad de un navegador viene de tener que soportar todos los sitios y todos los escenarios de uso, pero si lo haces para ti, puedes concentrarte en que funcionen lo bastante bien los sitios que te importan, y el problema se reduce muchísimo. Ojalá más gente intentara proyectos “imposibles”. Aunque el conjunto no sea útil para otros de inmediato, algunas partes pueden serlo, y a veces de un pequeño proyecto personal sale algo más grande, como Linux.
Si se dedicara aunque fuera la mitad del tiempo que se usa para decir que el proyecto de alguien es una pérdida de tiempo inútil a hacer algo constructivo, el mundo tendría muchísimos más proyectos geniales e interesantes. Es mejor fallar en algo audaz y ambicioso que no intentarlo en absoluto.
No hace falta implementar todas las funciones de un navegador web moderno. No necesitas la Battery API, la Gamepad API ni USB; basta con enfocarte en lo importante: HTML, CSS y JS. En el peor de los casos, aprenderás algo nuevo. Mucha suerte con el proyecto.
Eso de “no espero nada, tampoco espero terminarlo, es un proyecto que morirá pronto si no hay nadie que ayude, no espero que se convierta en el navegador dominante que derribe a los gigantes del mercado” se parece al primer anuncio de Linux que Linus publicó en comp.os.minix.
Era aquel texto que empezaba con “Hola a todos los que usan minix. Estoy haciendo un sistema operativo libre para clones AT 386(486). Es solo un hobby, no será grande ni profesional como gnu…”, y decía que había portado bash y gcc, que parecía que en unos meses habría algo práctico, y que le avisaran qué funciones querían, aunque no prometía implementarlas. Al final también decía que no contenía nada de código de minix, que tenía un sistema de archivos multihilo, pero no era portable y probablemente no soportaría nada más que discos duros AT.
Nadie sabe hasta dónde puede llegar un proyecto. Y si lo haces por tus propias razones, en cierto sentido eso ni siquiera importa.
No estoy acostumbrado a ver en HN un ambiente tan negativo hacia los navegadores y la web abierta. Me parece un intento muy valioso, independientemente de si tiene éxito o no.
Aunque el resultado sea apenas un navegador a medias que no esté a merced de las motivaciones de las grandes tecnológicas, podría ser útil si algún día llega el momento en que tengamos que dejar de depender de Firefox. Me gusta mucho Firefox, así que espero que ese día no llegue, pero me di cuenta de que, al acceder a la web, mi navegador es una especie de cuello de botella. Hay otros sitios web donde ver el mismo contenido y otras marcas de computadoras que se pueden usar, pero en medio siempre está Firefox. También hay otros navegadores, pero por lo general parecen estar basados en Googlium, o como se llame hoy. Así que les deseo suerte, espero que tengan éxito y pienso suscribirme al feed RSS para echarle un vistazo al proyecto de vez en cuando.
También hay pruebas de que sí es posible. Ladybird se hizo desde cero y, originalmente, incluso construyó su propia biblioteca estándar de C++; después de 3 o 4 años de trabajo a tiempo parcial, ahora hasta ejecuta Discord, aunque lentamente. Ahora también tiene desarrolladores de tiempo completo. GoSub, viendo el cargo.lock, no parece querer implementar todo desde cero, y es muy probable que use componentes ya hechos para cosas como decodificadores de imágenes, así que también podría tener potencial para crecer más rápido.
Hoy, “escribir un navegador desde cero” en realidad significa algo más cercano a implementar un sistema operativo portátil dentro de una caja, es decir, la plataforma web, y hacerlo compatible con lo que Google decidió agregar a su propio navegador.
Los navegadores tienen una cantidad enorme de funciones y API, y es difícil seguirle el paso a los cambios constantes de funciones y al dominio de Google; ni siquiera Microsoft pudo lograrlo. Un proyecto personal relacionado es Tersenet. https://github.com/runvnc/tersenet
Es más un concepto casi sin implementación, pero elegí intencionalmente los requisitos para que la gente pudiera implementarlo. Es mucho menos complejo que un navegador web completo. También hay una discusión relacionada con GPT-4. https://chat.openai.com/share/16d02b78-f876-4c87-949a-a60b4f...
También es relevante el proyecto Gemini, que sí existe y es práctico. https://geminiprotocol.net/ Inspiró la idea de Tersenet.
WebSQL, IndexedDB, service workers, WebGL, WebGPU, WebBluetooth, WebRTC: basta con actuar como si nada de eso existiera. El 99% de los sitios web reales, los sitios que no son “apps” web, no perderían funcionalidad.
En lo personal, me gustaría que hubiera más motores alternativos además de la monocultura de Blink y su pariente WebKit, y de Gecko/Quantum. Algo que ocupe el lugar que tenía KHTML antes de ser absorbido por WebKit, o simplemente otra opción open source con la que se pueda experimentar.
Me gustaría que quienes estén de acuerdo con esta idea se pusieran de acuerdo en un subconjunto que usar, y podría estar satisfecho con un navegador que no haga todo lo que hace el navegador de Google. Yo uso uMatrix para desactivar buena parte de las funciones de Google y nunca pongo el dominio google.com en la lista de permitidos, como demostrando que el mundo no se acaba. Los sitios que no funcionan son relativamente pocos.
La gran mayoría de los sitios web no quiere seguir tecnologías publicitarias recientes hechas específicamente para Google, AMP, DRM y cosas por el estilo.
Tal vez Mozilla y otros deberían crear una “VM” de JavaScript independiente que todos puedan usar.
Como alguien que no tenía idea de cómo funcionaba un navegador “real”, pero aun así decidió escribir uno propio, incluso con un motor de layout personalizado, diría simplemente: háganlo.
Ver un sitio web renderizado por tu propio código es muy gratificante, por más desastroso que sea el código o el resultado. Mi proyecto tiene unos dos años y medio, y ya renderiza más o menos HN y blogs simples. Si objetivamente es mejor que w3m, que originalmente quería reemplazar, no necesariamente; todavía vuelvo a w3m para algunas tareas. Aun así, lo estoy usando de forma útil para tareas que no esperaba, aprendí mucho sobre programación y, en cualquier caso, es genial que funcione. https://sr.ht/~bptato/chawan
Crear un navegador significa crear un motor de renderizado y un motor de layout. No es imposible, pero sí es una tarea bastante grande.
Pero también hay muchas cosas con más probabilidades de dar frutos. Se podría portar Servo a Nyxt Browser, o hacer un fork de WebKit/Servo/Gecko para quitar los estándares web invasivos y dañinos para el usuario que las empresas de publicidad inyectaron durante la última década. Si de todos modos son cosas que habría que hacer al construir desde cero, es mejor empezar en una comunidad existente que ya tiene disposición a colaborar, en vez de arrancar desde el piso
Gecko es prácticamente la definición de monolito, así que es imposible eliminar superficie de ataque, e incluso Tor usa un pésimo método de reemplazo con stubs que se rompe cada vez que cambian APIs internas o bridges. Eso sí, seguir el upstream en solitario es imposible, así que hacen falta colaboradores y mantenedores. Desde una perspectiva de ciberseguridad, documenté la superficie de ataque lo más posible y dejé anotado el trabajo pendiente y lo que eventualmente habrá que eliminar. https://github.com/tholian-network/retrokit/blob/main/SECURI...
Puede que sea bastante subjetivo, porque quiero usar RetroKit como la webview de mi Browser Stealth. Browser Stealth funciona como proxy de filtrado, scraper y caché descentralizada. https://github.com/tholian-network/stealth Actualmente lo estoy reescribiendo en golang
Hay que combinarla con un motor de layout de texto como https://github.com/pop-os/cosmic-text, y todavía no soporta todas las funciones. Las funciones importantes que faltan actualmente son
float,display: inline-block,box-sizing: content-boxyposition: static. Pero sí soporta Block, Flexbox y CSS Grid, y estamos agregando másSí, es un trabajo grande, pero no es lo más imposible para un equipo pequeño y dedicado
Basta con empezar renderizando sitios HTML razonablemente simples; no hay prisa ni una regla estricta que diga que hay que implementar todos los rincones del estándar. Los navegadores web y la web son gloriosamente humanos
Puedes tomar motores existentes, conectarlos y modularizarlos lo suficiente como para poder cambiarlos en cualquier momento, y seguirá siendo un navegador de verdad. Personalmente, creo que aquí la gente se enfoca demasiado en los engranes internos, cuando en realidad, además de renderizado/layout/scripting, hacen falta mejores interfaces y otros componentes
Te apoyo. Ojalá sigas adelante.
Implementé en Python una parte muy pequeña del algoritmo ORC Solver, y usé wxWidgets para el renderizado. Para calcular el ancho del texto usé la API de rangos de texto de wxWidgets. El white paper de ORC Solver está aquí: https://yuejiang-nj.github.io/Publications/2020CHI_ORCSolver...
Estoy pensando cómo implementar branch and bound, así que me vendría bien información al respecto. Creo que para ver algoritmos de composición tipográfica tendría que estudiar el código base de TeX, y también fue muy interesante usar la biblioteca JavaScript Masonry para bin packing de layout
“¡Si quieren mi HTML, se los daré! ¡Búsquenlo! Dejé todo lo del mundo allí”.
“¡Y así los hackers, persiguiendo sus sueños, se dirigieron a la HyperText Line, y el mundo entró en la verdadera Gran Era de los Navegadores!”
Durante años creí que los navegadores eran una montaña infranqueable, pero ahora parece que cada vez más gente cree que podemos lograrlo. Mi análisis de 2 segundos es que esta corriente aparece porque quienes están creando nuevos navegadores no intentan imitar ni competir con los monstruos gigantes existentes, sino que quieren cambiar la web. Me gusta
Sobre la parte política del artículo: el mundo está roto, y leer solo noticias rotas cansa. Pero desconectarse de la realidad para volverse “apolítico” me parece renunciar a la humanidad; es decir, renunciar a los propios hijos y sobrinos, y a los hijos de los mejores amigos.
Ni siquiera hace falta cambiar el mundo; basta con pequeños cambios en la propia comunidad. En especial, como programadores, lo que creamos puede afectar a miles de personas en todo el mundo y cambiar rumbos. A veces me pregunto si las cosas serían distintas si todos invirtiéramos apenas el 3~5% de nuestro tiempo en apoyar a la comunidad y en alguna forma de activismo.
Nada de lo que lea en las noticias cambiará la forma en que voto, que de hecho sería la mejor razón para verlas.
Dicho de otro modo, yo renuncié al mundo. Pero los hijos de otras personas no son mi responsabilidad. Hago tanto como los demás para hacer “lo correcto”, pero no más que eso. Antes me preocupaba por estas cosas, intentaba reducir mi huella personal y pensaba en la sostenibilidad y en las futuras generaciones, pero perdí la esperanza. Se sentía como luchar contra la corriente. Ahora solo intento que mi huella no sea mayor que el promedio y tratar bien a la gente que me rodea.
Si Rust es un requisito, creo que sería más provechoso aprender contribuyendo a Servo y enviando PR pequeños. https://github.com/servo/servo
Dicho eso, lo entiendo porque también he hecho proyectos “desde cero” al sentir que era difícil leer una base de código existente o que podía hacerlo mejor. Cada quien tiene su forma.
Del mismo modo, Servo fue diseñado para reemplazar partes del navegador Firefox, así que tenía que encajar en huecos “con forma de Gecko”. Por ejemplo, usa cadenas UTF-16 en varios lugares por compatibilidad con el resto de Firefox. Si se hiciera hoy, quizá se podría reescribir Servo con Rust moderno para hacerlo más pequeño, más ágil y tal vez más rápido.