1 pontos por GN⁺ 1 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • Em abril, o Ladybird mesclou 333 PRs de 35 contribuidores e recebeu novos apoios de US$ 50.000 da Human Rights Foundation e US$ 1.000 de Jakub Stęplowski
  • Foram adicionados um visualizador de PDF embutido, autocompletar na barra de endereço com base no histórico de navegação, frontend Linux com GTK4/libadwaita e a UI de gerenciamento about:bookmarks, ampliando os recursos de navegação e a interface desktop
  • O parser HTML agora faz parsing progressivo do corpo da resposta, e o speculative parser busca recursos antecipadamente; a compilação de nível superior do JavaScript foi movida para uma thread em segundo plano, reduzindo em cerca de 200 ms o tempo da thread principal no carregamento do YouTube
  • O mecanismo JavaScript melhorou o desempenho no Speedometer e no carregamento de sites reais com cache de for-in, alocador de registradores O(1), compartilhamento de identificadores sem cópia, JS::Substring lazy e melhorias no cache de views de typed array
  • Foram incluídos Cache/CacheStorage, image-set(), CSS anchor positioning, DNS assíncrono, pintura de GPU baseada em dmabuf, mimalloc como padrão e Rust obrigatório, e a pontuação no WPT subiu de 2.003.537 para 2.067.263

Escala de desenvolvimento e patrocínio

  • Em abril, o Ladybird mesclou 333 PRs de 35 contribuidores, dos quais 7 fizeram seu primeiro commit no Ladybird
  • Como novos patrocinadores, a Human Rights Foundation contribuiu com US$ 50.000 por meio do programa “AI for Individual Rights”, e Jakub Stęplowski doou US$ 1.000
  • O Ladybird é mantido integralmente por patrocínios de empresas e indivíduos que apoiam a web aberta

Recursos de navegação e frontend

  • Visualizador de PDF embutido

    • PDFs são renderizados embutidos por meio do visualizador pdf.js incluído no pacote (#9132)
    • O pdf.js é um visualizador de PDF escrito apenas em JavaScript, HTML e CSS, oferecendo navegação entre páginas, seleção de texto, zoom e busca dentro do documento
    • Ao carregar o Intel ISA Manual com o pdf.js, ficaram evidentes pontos de melhoria no cache de views de typed array e na invalidação de :has()
  • Histórico de navegação e autocompletar na barra de endereço

    • Ao digitar na barra de endereço, são exibidas sugestões avançadas com base no histórico, incluindo favicon e título de páginas visitadas anteriormente, atalhos de mecanismo de busca e conclusão geral de URLs (#8933)
    • O HistoryStore, baseado em SQLite, armazena o título, favicon, contagem de visitas e horário da última visita de toda navegação
    • A página de configurações de privacidade agora liga à opção “Clear browsing history”, e tanto a UI em Qt quanto a em AppKit renderizam as novas linhas avançadas
  • Frontend GTK4 / libadwaita

    • Um novo frontend Linux baseado em GTK4 e libadwaita foi adicionado ao Ladybird, oferecido lado a lado com o frontend Qt existente (#8691)
    • Ele foi inspirado no GNOME Web (Epiphany) e, seguindo as diretrizes de design do GNOME, usa menu hambúrguer e abas AdwTabView sem barra de menus
    • Oferece autocompletar e ícone de segurança na barra de URL, localizar na página, tela cheia, menu de contexto, caixas de diálogo de alert/confirm/prompt/color/file, área de transferência, múltiplas janelas, tema claro/escuro e escalonamento por DPR
    • Ainda está em estágio inicial, então ainda não atingiu paridade funcional com os frontends Qt e AppKit
  • Favoritos

    • Aos favoritos adicionados no mês passado foi somada uma UI de gerenciamento
    • A página about:bookmarks permite gerenciar favoritos e pastas (#8825)
    • A nova página oferece suporte à importação e exportação de favoritos (#8938)
    • Foi adicionado um menu de contexto para editar favoritos e pastas (#8715)
    • Um timestamp date_added foi adicionado a todos os favoritos e pastas (#8867)
    • A barra de favoritos agora suporta abrir em nova aba, copiar URL, clique do meio e Ctrl/Cmd+clique para abrir em nova aba (#8758)
    • A API HTML5 de arrastar e soltar foi conectada, about:bookmarks a usa para reordenação, e ela também funciona em páginas web comuns (#8783)

Parsing de HTML, execução de scripts, pipeline de renderização

  • Parsing de HTML especulativo e progressivo

    • O parser de HTML foi alterado para consumir o corpo da resposta progressivamente(#9151)
    • Os bytes passam por um decodificador de texto em streaming e entram no tokenizador em chunks; quando falta entrada, o tokenizador pausa e retoma quando mais dados chegam
    • Isso substitui o modelo anterior, que esperava o recebimento do corpo completo para então iniciar o parsing
    • Um parser de HTML especulativo também foi implementado(#9114)
    • Quando o parser principal é bloqueado por um script externo síncrono, um tokenizador separado faz uma varredura adiantada da entrada ainda não parseada e emite buscas especulativas de recursos <script src>, <link rel=stylesheet|preload> e <img src>
    • Ele acompanha <base href> e pula corretamente o interior de templates e foreign content
    • O parser especulativo é conectado ao preload map do documento, de modo que recursos descobertos especulativamente sejam deduplicados com buscas posteriores do parser normal(#9164)
  • Compilação de JavaScript fora da thread principal

    • A geração de bytecode do código de nível superior de scripts carregados é executada em um pool de threads em segundo plano(#9118)
    • As threads de trabalho criam o bytecode e os dados necessários para gerar Executable, enquanto o trabalho que toca a VM ou o heap do GC permanece na thread principal
    • Lida com classic script, module e IIFE de nível superior, e só o carregamento do YouTube já move cerca de 200ms de tempo da thread principal para threads em segundo plano
  • Rasterização por Navigable

    • Cada Navigable é rasterizado de forma independente em sua própria thread(#8793)
    • Antes, iframes eram pintados de forma síncrona como display lists aninhadas dentro da display list pai, então apenas a thread de renderização do traversable de nível superior ficava ativa
    • A display list pai agora referencia a saída rasterizada de cada iframe por meio de ExternalContentSource, então a invalidação de iframe não exige regravar o pai
    • Além do paralelismo, isso também é trabalho preparatório para mover iframes para processos sandbox separados
  • Pintura por GPU baseada em dmabuf no Linux

    • Em builds Linux com Vulkan, o WebContent pintava em uma surface Skia acelerada por GPU, mas o buffer compartilhado com o processo de UI era um bitmap de CPU, então havia readback de GPU para CPU a cada flush
    • SharedImage agora pode armazenar handles Linux dmabuf, permitindo que os buffers front/back permaneçam na GPU até o processo de UI(#8917, #8920)

Desempenho e compatibilidade do mecanismo JavaScript

  • Otimização de chamadas JS-para-JS

    • Vários PRs foram aplicados para que as instruções Call, Return e End permaneçam dentro do interpretador em assembly AsmInt nos casos comuns (#8891, #8909, #8912)
    • O salvamento/restauração de registradores usa instruções ARM64 paired load/store (ldp/stp) ajustadas manualmente
    • Chamadas de native function também são despachadas diretamente pelo AsmInt por meio de uma nova variante RawNativeFunction, que armazena ponteiros de função comuns em vez de AK::Function (#8922)
  • Alocador de registradores de bytecode O(1)

    • Generator::allocate_register tinha uma estrutura que vasculhava o pool disponível para encontrar o registrador de menor número, e só essa função consumia cerca de 800ms durante o carregamento do x.com
    • Após o fim do período de equivalência do pipeline C++/Rust, o alocador foi trocado por uma pilha LIFO simples (#9007)
  • Iteração for-in com cache

    • A posição de for (key in obj) armazena em cache um snapshot achatado de chaves enumeráveis e o reutiliza enquanto forem mantidos o shape do receiver, o armazenamento indexado e a cadeia de protótipos (#8856)
    • O Speedometer 2 subiu de 67.7 → 73.6, e o Speedometer 3 de 4.11 → 4.22
  • Outras melhorias no mecanismo

    • O parser agora compartilha nomes de identificadores por zero-copy entre lexer, parser e scope collector, acelerando o parsing em 1,14x em um corpus de JS de sites e reduzindo o RSS em 282MB (#8801)
    • A concatenação de strings curtas pula a representação rope quando o resultado de qualquer forma será observado como uma flat string, ficando 2,13x mais rápida em loops densos de a + b (#9184)
    • Arrow functions com lexical this não alocam um function environment a cada chamada, resultando em melhoria de 2,13x em microbenchmarks (#9192)
    • Arrays esparsos não pagam custo imediato pelos holes, e Array(20_000_000) permanece majoritariamente como metadados em vez de realizar trabalho proporcional a 20 milhões de elementos virtuais (#8847)
    • O novo tipo lazy JS::Substring dá suporte a capturas de regexp e a built-ins de string como slice, split e acesso indexado, trazendo melhora de 1,066x no benchmark regexp do Octane (#8863)
    • As source positions agora são preservadas de ponta a ponta no source map do bytecode, economizando cerca de 250ms no x.com (#9027)
    • TransferArrayBuffer com zero-copy economiza cerca de 130ms no carregamento do YouTube (#9088)
    • A cached typed-array view mudou de WeakHashSet para uma intrusive list, economizando cerca de 250ms ao carregar o PDF Intel ISA no pdf.js (#9180)
    • A estrutura em que todo Promise alocava 2 células PromiseResolvingFunction com closures AK::Function sem captura foi substituída por funções estáticas despachadas por um enum Kind, eliminando alocações por resolver (#9188)
    • Ao pular a marcação da property-table de shapes non-dictionary, o tempo de GC durante o carregamento de maptiler.com caiu 1,3 segundo (#9044)
    • Foi adicionado um fast path para Array.prototype.indexOf em packed arrays (#9123)
    • Array.prototype.sort agora reutiliza UTF-16 em cache em vez de retranscodificar a cada comparação (#9036)
    • Foi adicionado suporte à importação de módulos WASM, JSON e CSS (#6029)
    • O suporte à proposta ShadowRealm foi removido porque sua padronização ficou estagnada (#8753)

API da plataforma web e CSS

  • Cache e CacheStorage

    • Cache e CacheStorage foram implementados de ponta a ponta (#8745)
    • 9 métodos, incluindo open, has, delete, keys, match, matchAll, add, addAll e put, funcionam com base em um armazenamento temporário em memória
  • Recursos de CSS e correções de renderização

    • Foi adicionado suporte básico às formas padrão e com prefixo -webkit- de image-set(); no momento da pintura, é selecionada a resolução candidata que melhor corresponde ao device pixel ratio, e tipos MIME não suportados são ignorados (#9090)
    • Com o suporte a image-set(), a imagem de cabeçalho de gocomics.com agora é exibida
    • Foi adicionado suporte inicial a position-anchor e ao CSS anchor positioning, corrigindo a posição da mão e da arma em cssdoom.wtf (#8686)
    • A interpolação de cores foi reescrita para se alinhar ao css-color-4, interpolando em float em vez de u8 e tratando de forma consistente componentes ausentes/sem efeito, sRGB fora da gama e multiplicador de alpha (#8934)
    • Atributos HTML legados de apresentação como align e bgcolor não escrevem mais diretamente em cascaded properties; eles agora passam pela cascade como declarações normais do autor, fazendo com que a substituição de var() e o fallback de invalid-at-computed-value-time funcionem corretamente (#9176)
    • A mudança na cascade de presentational hints corrigiu um crash em html.spec.whatwg.org
    • <thead>, <tbody>, <tfoot> e <tr> agora refletem o atributo de apresentação align, corrigindo o posicionamento dos botões em bricklink.com (#9177)
    • A interpolação de stroke-dasharray faz com que os traços SVG sejam animados suavemente (#9133)
    • Elementos com o atributo autofocus agora realmente recebem foco quando a página é carregada (#9016)
    • O marcador de lista em texto RTL é posicionado à direita, corrigindo a renderização de listas na Wikipedia em árabe (#9099)
    • A baseline de containers inline flex/grid agora é derivada da primeira line box do filho, e não da última linha quebrada, corrigindo o alinhamento entre texto de links e ícones em nos.nl (#9183)

Rede e invalidação de estilo

  • Rede

    • getaddrinfo não bloqueia mais o event loop
    • O LibDNS agora executa lookup no thread pool, emite queries A e AAAA em paralelo e consolida lookups simultâneos para o mesmo nome(#9109)
    • O caminho de preconnect do RequestServer foi corrigido para não contornar o resolver, fazendo com que o threaded resolver do libcurl, que causava pthread_join na main thread, passe a ser roteado pelo mesmo caminho do pool de DNS(#9109)
    • Quando o WebContent era mais lento que a rede, o escoamento dos dados de resposta enfileirados no RequestServer era O(n²), e ao abrir um vídeo do YouTube eram gastos cerca de 30 segundos em memcpy e 3 segundos em Vector::remove
    • AllocatingMemoryStream foi alterado para uma lista encadeada simples de chunks, fazendo o consumo cair para O(1)(#9028)
    • O header Accept das requisições de imagem agora anuncia AVIF e WebP para se alinhar a outros engines, e alguns CDNs usam esse header para decidir se entregam formatos mais modernos ou fallback em JPEG(#9046)
  • Invalidação de estilo

    • A invalidation de selectors existente era simples sob a premissa de que selectors só olham para baixo, mas com :host e :has() uma mudança em descendant pode alterar o resultado de :has() em ancestor, tornando necessário um walk ascendente
    • Evitou-se reconstruir todos os caches de style scope quando uma mutação de stylesheet alterava apenas um único scope, reduzindo o rebuild do rule cache do Reddit de 13,2 s → 3,2 s(#9138)
    • A invalidation estrutural entre siblings deixou de se propagar para descendants que não observam posição, reduzindo em 11% os recomputes desnecessários no infinite scroll do Reddit(#9155)
    • A mutation invalidation de :has() agora pula anchors não afetados, e foi medida uma grande redução em azure.com(#9168)
    • No PDF da Intel ISA, as visitas à child-list de :has() caíram de 71 mil → 1,6 mil, economizando cerca de 650 ms no carregamento do pdf.js(#9179)
    • Um novo conjunto de testes de structural-invalidation revelou várias falhas de invalidation ausente, que foram corrigidas(#9095)
    • Também houve pequenas melhorias em torno de hover, scope de mutação de stylesheet, mapa de custom-property e diffing de computed style(#9077, #9049, #9079, #9080, #9141)

Alocação de memória e sistema de build

  • mimalloc como alocador padrão

    • O código C++ e Rust agora compartilha uma única instância de allocator do mimalloc v2, sem passar separadamente pelo system allocator(#8752)
    • Como malloc() não é sobrescrito para todo o sistema, bibliotecas de terceiros mantêm seus próprios contratos de allocator
    • O benchmark de JS melhorou de forma geral
  • Rust obrigatório e limpeza do sistema de build

    • A opção de build ENABLE_RUST foi removida, tornando Rust obrigatório(#8742)
    • O sistema de build GN foi removido por completo, deixando o CMake como única referência(#8931)
  • Mudanças relacionadas a GC e memória

    • A compilação agora usa -ftrivial-auto-var-init=zero para zerar GC pointers antigos na entrada da função, reduzindo sua detecção pelo conservative stack scanner(#9171)
    • A property UsedValues, usada raramente, foi movida para trás de um lazy pointer, reduzindo a struct de 424 bytes → 176 bytes e diminuindo LayoutState::populate_node_from() de 139 ms → 65 ms durante o carregamento de sainsburys.co.uk(#9104)
    • Os chunks do body de fetch, que antes passavam pelo caminho de pull-promise alocando 7 objetos de GC por chunk, agora entram diretamente no byte stream controller(#9169)

Comportamento aprimorado em sites

  • Reddit

    • O carrossel da galeria de imagens do Reddit agora funciona, e foram corrigidos dois bugs de layout não relacionados em torno de correspondência com ::slotted() e de descendentes com posicionamento absoluto em inline fragmentado (#9148)
    • Graças ao TextDecoderStream, a SPA não engole cliques em links, então agora é possível abrir comentários
    • O infinite scroll também foi impactado pelo trabalho de invalidation estrutural
  • YouTube

    • O YouTube se beneficiou de compilação de JS de nível superior off-thread, descompressão WOFF2 off-thread, redução do fanout de fetch de @font-face, correção de memory churn no RequestServer e TransferArrayBuffer zero-copy
    • A descompressão WOFF2 off-thread também economiza cerca de 170 ms no Gmail (#8976)
    • No carregamento inicial, o fanout de fetch de @font-face caiu de 177 para cerca de 9 (#9032)
  • Outros sites

    • Em gocomics.com, a imagem de cabeçalho agora aparece graças a image-set()
    • Em yandex.com/maps, a renderização WebGL de vector tiles agora funciona com correções de WebGL, incluindo a extensão WEBGL_debug_renderer_info (#9043)
    • Em strava.com, o login agora funciona porque Navigator.getBattery passou a lançar o tipo de erro exigido pela spec, em vez de um erro próprio (#8770)
    • O GitHub Insights agora carrega cerca de 100 ms mais rápido graças ao cache de seletores de Element.matches() e .closest() (#8987)
    • A página de comparação de notebooks do tweakers.net ficou cerca de 31% mais rápida com lookup indexado de nomes de propriedade de HTMLFormElement (#9009)
    • O neon.com não trava mais (#8812)
    • Em channel4.com, um ajuste na resolução de auto-margin em flex corrigiu o problema de alinhamento vertical do texto de categoria (#9050)
    • O Cloudflare Turnstile ainda não é superado, mas agora falha muito mais rápido graças ao tratamento de auth-scheme, à otimização de Array.prototype.shift() e ao hardening dos manipuladores de eventos da UA para elementos <input> range e number (#9063)

WPT e outras mudanças de plataforma

  • Web Platform Tests

    • A pontuação no WPT subiu de 2.003.537 para 2.067.263, registrando um aumento de 63.726 subtests neste mês
    • No entanto, o WPT passou a incorporar upstream da suíte oficial de conformidade ECMAScript, o test262, adicionando 53.207 subtests de JavaScript
    • O Ladybird já executa o test262 separadamente há anos e, como a conformidade do LibJS está em bom estado, passou em 52.045 deles, ou 97,8%
    • Dos 63,7 mil de aumento, cerca de 52 mil vieram da importação do test262, e os cerca de 11,7 mil restantes representam avanço real novo na plataforma do navegador
    • Com a importação do test262, o WPT agora mede a conformidade de JavaScript junto com o restante da plataforma
  • Texto, layout, processos e UI

    • A seleção e o hit testing de texto com ligatures deixaram de assumir uma code unit por glyph e passaram a iterar por grapheme clusters, distribuindo o avanço do glyph entre esses graphemes (#8829)
    • Definir innerHTML em um shadow root não invalida mais toda a árvore de layout do documento, reduzindo o tempo de layout-and-paint em 21% em pomax.github.io/bezierinfo (#9191)
    • Navegar uma popup tab para outro site não encerra mais o processo WebContent do pai (#8730)
    • Na UI em Qt, agora é possível alternar entre abas abertas com Ctrl+Tab e Ctrl+Shift+Tab (#8704)
    • Agora é possível rolar arrastando com o botão do meio do mouse pressionado ou entrar no modo de autoscroll com um clique parado no lugar (#8881, #8928)
    • Quando o que foi digitado na barra de endereço não pode ser sanitizado como URL ou consulta de busca, agora é exibida uma página de erro apropriada em vez de descartar a entrada silenciosamente (#9072)
    • Foi implementado o TextDecoderStream, a contraparte de streaming do TextDecoder, retendo UTF-8 parcial nas fronteiras entre chunks e permitindo editar comentários no Reddit (#9143)
    • Mensagens cross-process de BroadcastChannel agora são roteadas por IPC entre os processos WebContent e WebWorker, funcionando como em outros navegadores independentemente de em qual processo o listener esteja (#8865)

1 comentários

 
GN⁺ 1 시간 전
Comentários do Hacker News
  • Se você quer usar um navegador sem JavaScript, o protótipo de navegador feito pela Dioxus também está ficando bem interessante
    O Dioxus, um framework de GUI em Rust, está sendo desenvolvido como parte de um renderizador nativo e segue uma direção parecida com a do Flutter ao tentar criar sua própria alternativa ao Skia, mas, em vez de usar só canvas na web como o Flutter web, ele funciona na web com os padrões HTML/CSS
    Ele não depende de bases de código existentes de navegadores como Chromium, Gecko ou WebKit, e está mais próximo de uma implementação feita quase do zero, aproveitando crates Rust como stylo e taffy, usados pelo Servo: https://github.com/DioxusLabs/blitz (/apps/browser)
  • A parte mais difícil do desenvolvimento de navegadores sempre foi a compatibilidade web artificial
    Muitos sites bloqueiam à força o carregamento em certos navegadores e só permitem Chromium; essa é a realidade que a Ladybird vai enfrentar e um grande fator que impede a concorrência de novos navegadores
    O DRM Widevine também é muito difícil de conseguir para navegadores novos, e até o Zen Browser, com 10 milhões de usuários, não conseguiu obtê-lo
    • Infelizmente, a nova geração não aprendeu a lição do IE, e acaba sendo a primeira a reclamar quando o outro lado não segue os caprichos da Chrome OS Platform
    • Não sei o quão comuns esses bloqueios realmente são
      Usei Firefox nos últimos 20 anos e nunca vi um site exigir que eu mudasse para Chromium por compatibilidade
    • Se essas barreiras artificiais impactam a interoperabilidade a esse ponto, então 99% do obstáculo já foi superado, e a maior parte pode ser contornada com disfarce da string User-Agent
      O Widevine de fato é uma barreira real, mas, na prática, ele só tende a impedir reprodução em 4K em alguns sites de streaming, como Netflix e Disney
      Considerando que o Zen reuniu 10 milhões de usuários sem Widevine, também é difícil dizer que isso seja algo absolutamente central
    • A Ladybird começou recentemente a se identificar como Chrome exatamente por esse motivo
    • Para fins de teste de compatibilidade, dá para imitar o User-Agent
      Se você controla o próprio navegador, fora as questões ligadas a DRM, quase nada é impossível
  • Parece que está ficando bem utilizável
    Esse tipo de post me lembra a diversão de ler atualizações de emuladores de jogos
    Algo como “corrigimos o bug X para que Y funcionasse direito, e como resultado o jogo Z agora roda”; uma das correções desta vez foi CSS Doom, então até existe certa sobreposição com o mundo dos games
    • É uma comparação bem justa
      Já ouvi o Andreas dizer várias vezes que fazer um navegador é como fazer um emulador
      Cada site usa recursos diferentes de formas diferentes, e ele compara os sites a ROMs
  • A Ladybird está indo muito bem mesmo
    Sou usuário antigo do Firefox, mas, quando a Ladybird entrar numa alfa bem inicial e começarem a sair builds pré-compiladas, com certeza vou testar logo no começo
    • Se quiser rodar agora mesmo nesta fase, compilar localmente é fácil, e basta instalar as dependências e executar alguns comandos do script de build: https://github.com/LadybirdBrowser/ladybird/blob/master/Docu...
    • A Mozilla precisa, no mínimo, de um choque forte
    • Compilar por conta própria também é bem fácil, especialmente se você pedir para o Claude Code fazer isso
  • GTK4 / libadwaita frontend soa muito bem
    Prefiro UI/UX em GTK a Qt, então estou animado para ver o progresso desse lado
  • strava.com : Login works now that Navigator.getBattery throws the spec-mandated error type instead of one of our own (#8770).
    Por que o Strava quer saber o nível da minha bateria?
    • A possibilidade mais provável é que isso seja usado para gerar uma impressão digital única para rastreamento
    • Talvez usem a API de bateria como heurística para escolher uma versão de baixo consumo do site
      Pode existir uma versão web voltada a países em desenvolvimento, ou talvez queiram reduzir a frequência de consulta de localização quando a bateria estiver baixa para economizar energia
      É tudo especulação, mas não é totalmente absurdo que um site como o Strava peça informações de bateria, embora no geral pareça um pouco suspeito
    • O Strava é um serviço de rastreamento de rotas
      Assumindo que também possa ser usado pelo site, é bem provável que queiram ajustar a frequência de consulta de localização para equilibrar precisão e consumo de energia
    • Bots tentando fazer força bruta em contas talvez não implementem essa API como um dispositivo real faria
  • Post anterior: https://news.ycombinator.com/item?id=47985497
  • Gosto muito da direção que o SerenityOS busca, e espero que esse foco tenha sido mantido no navegador Ladybird
  • Parabéns
    Só que a captura de tela dos marcadores de lista em texto RTL parece igual
    Nos dois casos, o marcador da lista está à esquerda
  • https://ladybird.org/assets/img/newsletter-apr-2026-reddit-g...
    Tenho muito respeito por quem usou Evangelion do r/unixporn no teste de Reddit da Ladybird
    Não assisti tanto Evangelion assim, mas vi documentários explicativos inúmeras vezes e gostei tanto a ponto de usar de papel de parede por um tempo
    O ponto principal é que o Reddit funcionar na Ladybird é algo impressionante
    Não sei se o YouTube funciona, mas espero que funcione também, porque isso dá mesmo a sensação de que a Ladybird está se tornando utilizável no dia a dia
    Também agradeço ao https://jakubsteplow.ski/ por apoiar a Ladybird
    Gostaria que houvesse mais divulgação ativa para quem doa a projetos open source, de um jeito melhor do que anúncios do Google, e desejo tudo de bom ao Jakub, além de esperar que outras pessoas também façam doações independentes a projetos como a Ladybird
    Também agradeço à Human Rights Foundation https://hrf.org/program/ai-for-individual-rights/
    É impressionante e realmente inspirador que uma pessoa tenha chegado tão longe num cenário em que os navegadores estavam quase num monopólio/oligopólio
    • Gosto de EVA, mas recomendo com cautela
      Há basicamente dois lados: um é uma ficção científica de mechas/alienígenas/monstros com uma estética incrível, e o outro é um drama pessoal focado em autodesprezo e solidão
      Para a maioria das pessoas, o primeiro lado será mais atraente, mas é o segundo que continua marcante até hoje
      Se for assistir, vale prestar atenção à ordem
      Existe a linha do tempo da série original de TV seguida pelo filme “End of Evangelion”, e existe também a série de filmes “Rebuild of Eva”, que começou como um reboot completo, mas de algum jeito acabou virando o reboot/remake/sequência final da obra original
    • https://ladybird.org/#about
      Como resposta à pergunta “quantas pessoas estão trabalhando em navegadores hoje?”, está escrito que a Ladybird atualmente tem 8 engenheiros em tempo integral pagos e também uma grande comunidade de contribuidores voluntários
    • O YouTube funciona na Ladybird
      A maior parte também funciona, mas, além da velocidade, o maior problema é que muitas verificações de ‘confirmar que você é humano’ não funcionam direito na Ladybird