1 puntos por GN⁺ 2023-09-23 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2023-09-23
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.

    • La actitud de “me enoja no poder hacer nada, y esta es mi forma de intentar hacer algo” vale oro y, de hecho, es la actitud que cambia el mundo.
      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.
    • Es raro que haya que escribir una respuesta así en ‘hacker’ news, pero haz lo que quieras hacer. Algunas personas hacen carpintería, arreglan autos y juegan; a otras les gusta programar. Yo también tengo muchos proyectos parciales que empecé por varias razones, y todos fueron divertidos. Te deseo suerte y que lo disfrutes. Quizás incluso se convierta en algo más grande.
    • Empezar con la actitud de que es un proyecto personal es muy bueno.
      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.
    • Ignora el ruido. En HN a veces hay demasiada mentalidad de cangrejos en la cubeta.
      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.
    • Me gustaría que más gente intentara hacer una implementación de navegador. Hay muchos comentarios diciendo que es una tarea enorme, y en efecto puede serlo, pero eso no significa que sea tan mala.
      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.

    • Dijo que “probablemente no soportaría nada más que discos duros AT”, y ahora estamos instalando Linux en naves espaciales.
      Nadie sabe hasta dónde puede llegar un proyecto. Y si lo haces por tus propias razones, en cierto sentido eso ni siquiera importa.
    • Leer aquel anuncio de hace tanto tiempo se siente una locura, pero al final llegamos hasta aquí. También es sorprendente que Linus siga liderando el proyecto con constancia, y ahora Linux se convirtió en el sistema operativo base de Internet. Las salas de servidores de casi todas las grandes empresas están compuestas en su mayoría por servidores que ejecutan Linux o derivados internos.
  • 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.

    • ¿No es casi una rutina establecida que, cuando se abre un hilo sobre navegadores en HN, aparezcan como una docena de respuestas muy votadas afirmando que crear un navegador nuevo es imposible?
      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.

    • No necesariamente. Si limitas el alcance a un visor de documentos de hipertexto, de repente se vuelve abordable. Muchas funciones son del tipo PWA que nadie pidió y que tampoco se usan para nada bueno.
      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.
    • Ladybird es un proyecto muy joven, pero está avanzando a un ritmo bastante bueno. Claro, hay que tener en cuenta que el desarrollador principal tiene bastante experiencia en esta área.
      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.
    • Decir que tiene que ser compatible con lo que Google decidió agregar a su navegador es exagerado. Hay muchas personas respetables que mantienen páginas personales con HTML mucho más simple, y news.ycombinator.com también es querido por conservar su apariencia clásica.
      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.
    • ¿Por qué tendría que hacer necesariamente lo que hace Google? La mayoría de los sitios web siguen HTML y ECMAScript. ¿No es el punto central de este proyecto desincronizarse de lo que hacen las grandes tecnológicas?
      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.
    • ¿No será que lo que falta para enriquecer el ecosistema de navegadores es un runtime/intérprete de JavaScript modular e independiente, similar a Java? Java tiene varias JVM. https://en.wikipedia.org/wiki/List_of_Java_virtual_machines
      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

    • Por eso yo lo hice con WebKit. https://github.com/tholian-network/retrokit Porque resultó que Servo ya no es tan modular como antes.
      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
    • Mantengo una biblioteca de layout web diseñada para integrarse en otro software. https://github.com/DioxusLabs/taffy
      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-box y position: static. Pero sí soporta Block, Flexbox y CSS Grid, y estamos agregando más
    • Es cierto que es una tarea pesada, pero no creo que eso sea motivo para rendirse. En cierto sentido, hoy es incluso más fácil que antes, porque ahora existen estándares completos.
      Sí, es un trabajo grande, pero no es lo más imposible para un equipo pequeño y dedicado
    • ¿Acaso un motor de renderizado y layout tiene que pasar todas las pruebas ACID desde el principio? Se puede ir construyendo de forma incremental.
      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
    • Solo tienes que escribir tú mismo el motor de renderizado y layout si quieres hacerlo desde cero. Un navegador es principalmente una aplicación de cara al usuario, no los engranes internos en sí.
      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.

    • No veo noticias en absoluto. El 99% es basura sesgada, muchas veces ni siquiera es cierto, y te contamina la mente. Gracias a eso, mi vida y mi salud mental mejoraron muchísimo.
      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.
    • Estoy totalmente de acuerdo con la participación comunitaria. Quitar la nieve frente a la casa de un vecino mayor está bien porque es hacer algo concreto.
    • En general estoy de acuerdo. Hace unos años decidí dejar de escuchar noticias, pero eso fue después de decidir no tener hijos. Me parece incorrecto que quienes tienen hijos se tapen los oídos.
      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.
    • Desconectarse de la industria de las noticias no implica automáticamente desconectarse de la realidad. Al menos eso espero. Yo consumo noticias no técnicas más o menos una vez por semana.
  • 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.

    • Escribir por tu cuenta una versión de juguete de un programa es una gran manera de entender la versión grande.
    • Como Rust y Servo empezaron juntos, Servo tiene mucho código anterior a Rust 1.0, y por esa influencia hay partes con un estilo menos que ideal.
      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.
    • Servo es un proyecto increíble y me gusta lo que ha hecho Mozilla, pero al final, financieramente, ¿no está vinculado con Google?