1 pontos por GN⁺ 2023-09-23 | 1 comentários | Compartilhar no WhatsApp
  • Uma experiência pessoal de evitar notícias acabou levando a notícias de tecnologia, e, após sentir impotência diante de mudanças negativas repetidas, a pessoa decidiu criar seu próprio navegador
  • No Hacker News, continuou encontrando tendências como atualizações indesejadas, aumento de assinaturas, coleta de dados pessoais, discussões sobre proibição de criptografia e controle do ecossistema de navegadores
  • Desta vez, em vez de apenas evitar, tentou uma pequena reação como programador, criando e publicando código
  • Reconhece que é improvável que o projeto seja concluído ou se torne um navegador popular, e admite que pode ser interrompido em breve se não receber ajuda
  • Espera que um projeto de navegador aberto e não comercial inspire outras pessoas e leve a mais projetos alternativos

Como evitar notícias levou ao desenvolvimento de um navegador

  • Há cerca de 10 anos, ao visitar clientes com frequência de carro, costumava ouvir a Business News Radio (BNR) ou a Radio 1, da Holanda, mas um dia desligou o rádio e percebeu que não queria mais ouvir notícias
  • Sentia que as notícias repetiam apenas coisas ruins, como guerras e corrupção, e via que, como indivíduo, não tinha como resolver esses problemas
  • Depois disso, passou a evitar ouvir, assistir e procurar notícias na internet; quando o jornal das 8 começava, trocava de canal ou saía do cômodo onde as notícias estavam passando
  • Considerava que as notícias importantes acabariam chegando por outras pessoas e, em vez de notícias gerais, passou a acompanhar apenas alguns subreddits do Reddit e notícias de tecnologia de forma limitada

A mesma sensação de impotência se repetiu nas notícias de tecnologia

  • Cerca de 98% das notícias de tecnologia vinham do Hacker News, do Y Combinator, mas com o tempo voltou a crescer a mesma sensação que já tinha sentido com as notícias gerais 10 anos antes
  • Os problemas que encontrava repetidamente eram atualizações indesejadas, promessas quebradas, aumento de assinaturas, aquisições por empresas e tentativas de coletar ainda mais dados pessoais
  • Também vê como parte do mesmo problema o movimento de governos tentando proibir a criptografia sob o pretexto de combater criminosos sexuais que exploram crianças
  • Os navegadores se tornam um alvo especialmente importante, já que são onde quase todas as pessoas no mundo passam parte do seu tempo
    • Se o próprio navegador exibir anúncios, bloqueadores de anúncios voltados para anúncios de sites podem ter dificuldade para reagir
    • Já houve casos de extensões exclusivas para um navegador específico tornarem mais difícil usar certos sites em outros navegadores, e acredita que, se surgir uma forma de evitar problemas de monopólio, isso pode voltar a se repetir

Por que decidiu fazer um navegador e por que tem expectativas baixas

  • Desta vez, em vez de apenas evitar, concluiu que, como programador, podia desenvolver um navegador por conta própria e compartilhar o código
  • Há dois motivos para ter decidido criar um navegador
    • Uma tentativa de empurrar de volta, ainda que de uma forma muito pequena
    • Um motivo pessoal: há muito tempo queria tentar construir um navegador por conta própria
  • Não tem grandes expectativas para o projeto
    • Não espera que seja concluído
    • Acredita que pode morrer em breve se ninguém ajudar
    • Não espera que se torne um navegador dominante capaz de derrubar os grandes navegadores existentes
  • O que espera é que ele permaneça aberto com objetivo não comercial e que outras pessoas se inspirem para criar seus próprios projetos
  • O andamento do projeto pode ser visto no post de progresso no codemusings.nl
  • O repositório do projeto está em jaytaph/gosub-browser

1 comentários

 
GN⁺ 2023-09-23
Opiniões do Hacker News
  • Sou o OP. Obrigado pelos comentários positivos/negativos/neutros e, para acrescentar algumas coisas: é verdade que já existem muitos projetos de navegador para os quais se pode contribuir e que isso seria mais eficiente, mas aí acabamos com apenas alguns poucos navegadores. Eu quero que existam muitos navegadores, para que as pessoas tenham opções.
    Este é claramente um projeto pessoal. Eu teria começado mesmo que não fosse só por estar de saco cheio da indústria de tecnologia, mas estou irritado com a sensação de impotência de que não dá para mudar nada, e esta é a minha forma de tentar fazer algo. Não espero que um navegador de verdade fique pronto. Espero que as pessoas olhem para o meu código e riam, ou tirem ideias melhores dele. Por exemplo, se o algoritmo do tokenizador e do parser de HTML5 for explicado passo a passo, como no site do whatwg, fica mais fácil para qualquer um escrever seu próprio parser de HTML5. Se Google ou Microsoft usarem seu domínio de mercado para criar um HTML5 customizado em formato fechado, algo como ghtml, quem conseguiria impedir? O motivo de eu querer começar do zero é entender melhor as dificuldades técnicas lá de baixo.

    • A atitude de “estou irritado por não poder fazer nada, e esta é a minha forma de tentar fazer algo” vale ouro e é, de fato, a atitude que muda o mundo.
      Também concordo com o que foi dito sobre a miséria das “notícias”. Em guerra psicológica, isso é chamado de desmoralização (sapping). Antigamente, o inimigo fazia propaganda para quebrar a vontade de resistir e deixar as pessoas impotentes; um exemplo clássico foi Lord Haw-Haw. https://en.wikipedia.org/wiki/Lord_Haw-Haw
      Hoje, os canais de notícias mainstream e os gigantes da tecnologia parecem tentar manter as pessoas presas em um estado permanente de desespero e ansiedade. O discurso sobre tecnologia também parece um poço de cinismo, evasão, negação, resignação e impotência aprendida; fiz muitas entrevistas e análises de sentimento recentemente, e os resultados foram terríveis. Dá a sensação de que a própria palavra “tech” está virando sinônimo de “resistir é inútil”. Fazer alguma coisa, não porque se espera sucesso, mas para dar o exemplo e preservar a própria sanidade, é a reação mais positiva e humana possível.
    • É estranho que seja preciso escrever uma resposta dessas no ‘hacker’ news, mas faça o que você quiser fazer. Algumas pessoas fazem marcenaria, consertam carros e jogam; outras gostam de programar. Eu também tenho muitos projetos parciais que comecei por vários motivos, e todos foram divertidos. Boa sorte e divirta-se. Talvez isso acabe se tornando algo maior.
    • Começar com a atitude de que é um projeto pessoal é muito bom.
      Para colocar no estilo de Linus Torvalds: quando você faz algo com a postura de “não estou tentando criar algo grande e profissional como o GNU, é para mim”, dá para realizar muito mais com muito menos esforço. Assim, você pode fazer concessões pragmáticas e chegar a algo útil para si, seja para aprendizado ou para uso real, com muito menos esforço do que ao tentar criar um “produto”. Muitos dos meus projetos pessoais também começaram ao encontrar pequenos projetos pessoais desse tipo, reaproveitar partes deles e depois seguir em direções completamente diferentes. É muito mais fácil pegar um projeto pequeno que seja “bom o bastante” do que reduzir ou adaptar uma fera enorme e cheia de recursos. Grande parte da complexidade de um navegador vem da necessidade de dar suporte a todos os sites e a todos os cenários de uso, mas, se eu o crio para mim mesmo, posso me concentrar em fazer funcionar suficientemente bem os sites com os quais me importo, e o problema diminui bastante. Gostaria que mais pessoas tentassem projetos “impossíveis”. Mesmo que o todo não seja imediatamente útil para outras pessoas, partes dele podem ser úteis e, às vezes, como no Linux, algo maior nasce de um pequeno projeto pessoal.
    • Ignore o ruído. Às vezes há muita mentalidade de caranguejos no balde no HN.
      Se as pessoas usassem em algo construtivo ao menos metade do tempo que gastam dizendo que o projeto de alguém é uma perda de tempo inútil, o mundo teria muito mais projetos legais e interessantes. É melhor falhar em algo ousado e ambicioso do que nem sequer tentar.
    • Eu gostaria que mais pessoas tentassem implementar navegadores. Há muitos comentários dizendo que é uma tarefa enorme, e de fato pode ser, mas isso não significa que seja tão ruim assim.
      Não é preciso implementar todos os recursos de um navegador web moderno. Você não precisa de Battery API, Gamepad API, USB e coisas do tipo; basta focar no HTML, CSS e JS importantes. No pior dos casos, você aprenderá algo novo. Boa sorte com o projeto.
  • A fala “não espero nada, nem espero terminar, é um projeto que morrerá logo se não houver ninguém para ajudar, não espero que vire um navegador dominante que derrube os gigantes do mercado” lembra o primeiro anúncio do Linux que Linus publicou em comp.os.minix.
    Era o texto que começava com “Olá a todos que usam minix. Estou criando um sistema operacional livre para clones AT 386(486). É só um hobby, então não será grande e profissional como o gnu…”, dizia que ele tinha portado bash e gcc, que algo prático parecia poder sair em alguns meses, e pedia que as pessoas dissessem quais recursos queriam, embora ele não prometesse implementá-los. No fim, ele também dizia que não havia nenhum código do minix, que havia um sistema de arquivos multithread, mas sem portabilidade, e que provavelmente não teria suporte a nada além de discos rígidos AT.

    • Ele disse que “provavelmente não teria suporte a nada além de discos rígidos AT”, e hoje estamos instalando Linux em espaçonaves.
      Ninguém sabe até onde um projeto pode chegar. E, se você está fazendo por seus próprios motivos, de certa forma isso nem importa.
    • Ler aquele anúncio antigo dá uma sensação absurda, mas no fim chegamos até aqui. Também é impressionante que Linus ainda conduza o projeto com seriedade, e hoje o Linux se tornou o sistema operacional base da internet. As salas de servidores de quase todas as grandes empresas são compostas, em sua maioria, por servidores rodando Linux ou variantes internas dele.
  • Não estou acostumado a ver um clima tão negativo no HN em relação a navegadores e à web aberta. Independentemente de dar certo ou não, vejo isso como uma tentativa muito valiosa
    Mesmo que o resultado seja apenas um navegador meio incompleto, não sujeito às motivações das gigantes de tecnologia, ele pode ser útil se um dia chegar o momento em que precisemos deixar de depender do Firefox. Gosto muito do Firefox e espero que esse dia nunca chegue, mas percebi que, ao acessar a web, meu navegador é uma espécie de gargalo. Existem outros sites para ver o mesmo conteúdo, e outras marcas de computadores que posso usar, mas no meio sempre está o Firefox. Há outros navegadores, claro, mas em geral parecem baseados no Googlium, ou qualquer que seja o nome disso hoje. Então desejo boa sorte, espero que dê certo e pretendo assinar o feed RSS para acompanhar o projeto de vez em quando

    • Quando uma thread sobre navegadores aparece no HN, não é quase inevitável que surjam uma dúzia de respostas bem votadas dizendo que criar um novo navegador é impossível?
      Também há provas de que é possível. O Ladybird foi criado do zero e, originalmente, até a biblioteca padrão de C++ era feita por eles; depois de 3 a 4 anos de trabalho em meio período, agora até roda o Discord, ainda que lentamente. Hoje também há desenvolvedores em tempo integral. Pelo cargo.lock, o GoSub não parece estar tentando implementar tudo do zero; coisas como decodificadores de imagem provavelmente usarão soluções prontas, então ele pode ter potencial para crescer mais rápido
  • Hoje, “escrever um navegador do zero” significa, na prática, algo próximo de implementar um sistema operacional portátil dentro de uma caixa — isto é, a plataforma web — e torná-lo compatível com as coisas que o Google decidiu adicionar ao próprio navegador
    Navegadores têm um volume enorme de recursos e APIs, e acompanhar as mudanças constantes de funcionalidades e o domínio do Google é tão difícil que nem a Microsoft conseguiu. Um projeto pessoal relacionado é o Tersenet. https://github.com/runvnc/tersenet
    Ele é mais um conceito, com quase nenhuma implementação, mas os requisitos foram escolhidos intencionalmente para que as pessoas consigam implementá-lo. É muito menos complexo que um navegador web completo. Também há uma discussão relacionada com o GPT-4. https://chat.openai.com/share/16d02b78-f876-4c87-949a-a60b4f...
    O projeto Gemini, que existe de fato e é prático, também tem relação. https://geminiprotocol.net/ Ele inspirou a ideia do Tersenet

    • Não necessariamente. Se você limitar o escopo a um visualizador de documentos hipertexto, de repente a coisa se torna acessível. Muitos recursos são do tipo PWA que ninguém pediu e que não são usados para nada bom
      WebSQL, IndexedDB, service workers, WebGL, WebGPU, WebBluetooth, WebRTC e afins podem simplesmente ser tratados como inexistentes. 99% dos sites reais, aqueles que não são “apps” web, não perderiam funcionalidades
    • O Ladybird é um projeto muito jovem, mas está avançando em um ritmo bem decente. Claro, é preciso levar em conta que o desenvolvedor principal tem bastante experiência nessa área
      Pessoalmente, eu gostaria de ver mais motores alternativos além da monocultura do Blink e de seu parente WebKit, e além do Gecko/Quantum. Algo para ocupar o lugar que o KHTML tinha antes de ser absorvido pelo WebKit, ou simplesmente mais uma opção open source para experimentar
    • Dizer que é preciso ser compatível com as coisas que o Google decidiu adicionar ao próprio navegador é exagero. Há muitas pessoas respeitáveis que mantêm páginas pessoais com HTML muito mais simples, e o news.ycombinator.com também é amado por manter seu visual clássico
      Seria bom se as muitas pessoas que concordam com essa ideia chegassem a um subconjunto que usariam, e eu ficaria satisfeito mesmo com um navegador que não fizesse tudo que o navegador do Google faz. Eu uso o uMatrix desativando boa parte dos recursos do Google, nunca coloco domínios google.com na lista de permissões, e sigo provando que o mundo não acaba por causa disso. Os sites que não funcionam são uma minoria relativa
    • Por que ele necessariamente precisa fazer o que o Google faz? A maioria dos sites segue HTML e ECMAScript. O ponto deste projeto não é justamente dessincronizar-se do que as gigantes de tecnologia fazem?
      A grande maioria dos sites não quer seguir tecnologias publicitárias recém-criadas especificamente para o Google, AMP, DRM e coisas do tipo
    • O que talvez esteja faltando para enriquecer o ecossistema de navegadores não seria um runtime/interpretador JavaScript modular e independente, parecido com o Java? O Java tem várias JVMs. https://en.wikipedia.org/wiki/List_of_Java_virtual_machines
      Talvez a Mozilla e outros precisem criar uma “VM” JavaScript independente que todos possam usar
  • Como alguém que decidiu escrever o próprio navegador sem saber absolutamente nada sobre como navegadores “de verdade” funcionam, inclusive criando um mecanismo de layout customizado, eu diria: simplesmente faça
    Ver um site sendo renderizado pelo seu próprio código é extremamente gratificante, por mais bagunçados que estejam o código ou a saída. Meu projeto tem cerca de dois anos e meio e agora renderiza o HN e blogs simples de forma razoável. Se ele é objetivamente melhor que o w3m, que eu originalmente queria substituir? Não necessariamente, então ainda volto ao w3m para algumas tarefas. Mesmo assim, ele acabou sendo útil para trabalhos que eu nem imaginava, aprendi muito sobre programação, e é legal simplesmente ver que funciona. https://sr.ht/~bptato/chawan

  • Criar um navegador significa criar um motor de renderização e um motor de layout. Não é impossível, mas é uma tarefa bem grande.
    Mas há muitas outras iniciativas com mais chance de dar frutos. Dá para portar o Servo para o Nyxt Browser, ou fazer um fork de WebKit/Servo/Gecko e remover os padrões web invasivos e prejudiciais ao usuário que empresas de publicidade injetaram nos últimos 10 anos. Se essas são coisas que você teria de fazer de qualquer forma ao criar tudo do zero, é melhor começar por uma comunidade existente que já esteja disposta a trabalhar junto do que começar do chão

    • Por isso eu fui de WebKit. https://github.com/tholian-network/retrokit Porque acabou ficando claro que o Servo não é tão modular quanto antes.
      O Gecko é praticamente a definição de um monólito, então é impossível remover a superfície de ataque; até o Tor usa um esquema ruim de substituição por stubs que quebra a cada mudança de API interna ou de bridge. Ainda assim, acompanhar o upstream sozinho é impossível, então são necessários contribuidores e mantenedores. Do ponto de vista de cibersegurança, documentei a superfície de ataque tanto quanto possível e anotei o trabalho restante e o que, no fim, precisa ser removido. https://github.com/tholian-network/retrokit/blob/main/SECURI...
      Talvez eu esteja sendo bem subjetivo, porque quero usar o RetroKit como webview do meu Browser Stealth. O Browser Stealth funciona como proxy de filtragem, scraper e cache descentralizado. https://github.com/tholian-network/stealth No momento estou reescrevendo em golang
    • Mantenho uma biblioteca de layout web projetada para ser integrada a outros softwares. https://github.com/DioxusLabs/taffy
      Ela precisa ser combinada com um motor de layout de texto como https://github.com/pop-os/cosmic-text, e ainda não dá suporte a todos os recursos. Entre os principais recursos atualmente ausentes estão float, display: inline-block, box-sizing: content-box e position: static. Mas já dá suporte a Block, Flexbox e CSS Grid, e estamos adicionando mais
    • É verdade que é uma tarefa pesada, mas não acho que isso seja motivo para desistir. Em certos aspectos, hoje é até mais fácil do que antes. Afinal, agora existem padrões abrangentes.
      É algo grande, sim, mas não chega a ser a coisa mais impossível para uma pequena equipe dedicada
    • Um motor de renderização e layout não precisa passar em todos os testes ACID desde o começo, precisa? Dá para construir isso gradualmente.
      Você pode começar renderizando sites HTML razoavelmente simples, não há pressa, e também não existe uma regra rígida dizendo que é preciso implementar todos os cantos do padrão. Navegadores web e a web são gloriosamente humanos
    • Você só precisa escrever seu próprio motor de renderização e layout se quiser escrever tudo do zero. Um navegador é principalmente um aplicativo voltado ao usuário, não as engrenagens internas em si.
      Se você pegar motores existentes, conectá-los e modularizar o suficiente para poder trocá-los a qualquer momento, ainda assim é um navegador de verdade. Pessoalmente, acho que as pessoas aqui se concentram demais nas engrenagens internas; na prática, além de renderização/layout/scripting, também precisamos de interfaces e outros componentes melhores
  • Torço por você. Continue tentando.
    Implementei em Python uma parte minúscula do algoritmo ORC Solver e usei wxWidgets para renderização. Usei a API de intervalo de texto do wxWidgets para calcular a largura do texto. O white paper do ORC Solver está aqui. https://yuejiang-nj.github.io/Publications/2020CHI_ORCSolver...
    Estou pensando em como implementar branch and bound, então seria bom ter informações relacionadas. Para ver algoritmos de composição tipográfica, acho que terei de estudar a base de código do TeX, e usar a biblioteca JavaScript Masonry para bin packing de layout também foi muito interessante

  • “Se querem meu HTML, eu lhes darei! Procurem! Deixei tudo que há no mundo lá”
    “E assim os hackers partiram rumo à HyperText Line em busca de seus sonhos, e o mundo entrou na verdadeira Grande Era dos Navegadores!”
    Durante anos acreditei que navegadores eram uma montanha intransponível, mas agora parece que cada vez mais pessoas acreditam que conseguimos fazer isso. Numa análise de 2 segundos, esse movimento aparece porque os novos criadores de navegadores não querem imitar e competir com os monstros gigantes existentes, mas sim mudar a web. Gosto disso

  • Sobre a parte política do texto: o mundo está quebrado, e é cansativo ler apenas notícias sobre coisas quebradas. Mas acho que se desligar da realidade e se tornar “apolítico” é desistir da humanidade — ou seja, desistir dos próprios filhos e sobrinhos, dos filhos dos seus melhores amigos.
    Não é preciso mudar o mundo; pequenas mudanças na própria comunidade já bastam. Especialmente como programadores, o que criamos pode afetar milhares de pessoas no mundo inteiro e mudar rumos. Às vezes penso se a situação seria diferente se todos investissem apenas 3% a 5% do tempo em apoiar a comunidade e em algum tipo de atividade.

    • Não acompanho notícias de jeito nenhum. 99% é lixo enviesado, muitas vezes nem é verdade, e contamina a mente. Graças a isso, minha vida e minha saúde mental ficaram muito melhores.
      Nada do que eu leio nas notícias mudaria a forma como voto — e esse talvez seja, na verdade, o melhor motivo para acompanhar notícias.
    • Concordo totalmente com participação na comunidade. Tirar a neve da frente da casa de um vizinho idoso é algo bom porque é fazer alguma coisa de verdade.
    • Concordo em linhas gerais. Decidi parar de acompanhar notícias alguns anos atrás, mas isso foi depois de decidir não ter filhos. Parece errado que pessoas que têm filhos tapem os ouvidos.
      Para colocar em palavras, eu desisti do mundo. Mas os filhos dos outros não são minha responsabilidade. Faço tanto quanto os outros para fazer “a coisa certa”, mas não mais do que isso. Antes eu me preocupava com essas coisas, tentava reduzir minha pegada individual e pensava em sustentabilidade e nas gerações futuras, mas perdi a esperança. Parecia lutar contra a maré. Hoje só tento garantir que minha pegada não seja maior que a média e tratar bem as pessoas ao meu redor.
    • Desligar-se da indústria de notícias não significa automaticamente desligar-se da realidade. Pelo menos espero que não. Eu consumo notícias não técnicas mais ou menos uma vez por semana.
  • Se Rust for obrigatório, acho que seria mais proveitoso aprender contribuindo com o Servo e começando com PRs pequenos. https://github.com/servo/servo
    Dito isso, eu entendo, porque já fiz projetos “do zero” por achar difícil ler uma base de código existente ou por pensar que eu poderia fazer melhor. Cada um tem seu jeito.

    • Escrever por conta própria uma versão de brinquedo de um programa é uma ótima forma de entender a versão maior.
    • Rust e Servo começaram juntos, então há muito código no Servo de antes do Rust 1.0 e, por causa disso, há partes em que o estilo não é o ideal.
      Da mesma forma, o Servo foi projetado para substituir partes do navegador Firefox, então precisava se encaixar em buracos “com formato de Gecko”. Por exemplo, em vários lugares ele usa strings UTF-16 por compatibilidade com o restante do Firefox. Hoje, talvez fosse possível reescrever o Servo em Rust moderno para torná-lo menor, mais enxuto e talvez mais rápido.
    • O Servo é um projeto incrível, e gosto do trabalho que a Mozilla fez, mas no fim das contas ela não está financeiramente ligada ao Google?