3 pontos por GN⁺ 2025-10-21 | 1 comentários | Compartilhar no WhatsApp
  • Xeus-Octave acaba de se juntar ao ecossistema de kernels do JupyterLite, permitindo executar código GNU Octave diretamente no navegador
  • GNU Octave é uma linguagem open source de computação científica compatível com Matlab, e este projeto fez sua adaptação para rodar em ambiente WebAssembly (WASM)
  • Para resolver problemas com código baseado em Fortran e dependências de BLAS/LAPACK, foi usado um toolchain customizado que combina LLVM Flang, Emscripten e Netlib LAPACK
  • Como o LLVM ainda não oferece suporte a símbolos comuns de Fortran (Common Block), o problema foi resolvido temporariamente com um patch provisório, com suporte oficial previsto para o LLVM 22
  • Com isso, o suporte do JupyterLite se expande do R para o Octave, marcando um passo importante na expansão do ecossistema de programação científica baseado em navegador

Visão geral do porte do Xeus-Octave para WebAssembly

  • Xeus-Octave é um kernel Jupyter que permite executar código GNU Octave no navegador, empacotado via emscripten-forge
    • GNU Octave é uma linguagem gratuita e open source capaz de executar scripts Matlab diretamente
    • Com esta integração, ele pode ser usado imediatamente no ambiente JupyterLite sem instalação separada
  • Assim como o Xeus-R-Lite desenvolvido anteriormente, ele usa um toolchain para compilar código Fortran (LLVM Flang + Emscripten)
  • Como biblioteca de dependência para operações matemáticas do Octave, foi escolhido o Netlib LAPACK em vez do OpenBLAS, melhorando a compatibilidade de build

Desafios técnicos no processo de build para WebAssembly

  • Ocorreu erro de build no LLVM devido ao problema de suporte a blocos comuns de Fortran (Common Symbol Block)
    • O streamer Wasm do LLVM v20 não implementa símbolos comuns, o que exigiu modificações no código
    • Em colaboração entre a equipe da QuantStack e Serge Guelton, o LLVM recebeu um patch provisório para tratar isso como símbolo fraco (weak symbol)
  • O suporte oficial deve ser incluído no lançamento do LLVM v22, e a versão atual do LLVM com patch foi publicada para Linux
  • O próprio Octave também recebeu ajustes para o alvo WASM, como desativação de recursos de GUI e unificação de assinaturas de funções Fortran

Integração e demonstração do Xeus-Octave

  • Após a conclusão do build, basta adicionar a receita do emscripten-forge para executar o Xeus-Octave no JupyterLite
  • O Xeus-Octave foi construído sobre o Xeus, framework de kernel Jupyter baseado em C++, permitindo executar comandos Octave e visualizá-los no navegador

Próximos passos

  • Como etapa seguinte, há planos de integrar o ecossistema de pacotes do Octave ao conda-forge e ao emscripten-forge
    • A utilidade pkg do Octave será ajustada para o ambiente de navegador, com a definição planejada do processo de instalação dentro de um ambiente conda
  • Com isso, o ambiente de programação científica e matemática baseado em navegador deve ficar ainda mais robusto

Principais contribuidores e contexto

  • A desenvolvedora líder Isabel Paredes, da QuantStack, já havia trabalhado anteriormente no porte para WebAssembly da linguagem R e do framework ROS
  • O Emscripten-forge é liderado por Thorsten Beier, com participação de vários contribuidores (Anutosh Bhat, Martin Renou e outros)
  • O JupyterLite é mantido principalmente por Jeremy Tuloup, e o Xeus por Johan Mabille
  • O Xeus-Octave foi desenvolvido por Giulio Girardi e Antoine Prouvost

1 comentários

 
GN⁺ 2025-10-21
Comentários do Hacker News
  • Caso alguém esteja ouvindo falar de Octave pela primeira vez: Octave é uma quase-réplica de código aberto do software comercial MATLAB veja mais na Wikipédia
    • A expressão "quase-réplica" é um pouco exagerada; gosto de software de código aberto, mas, para trabalhos mais avançados, ainda dá a sensação de que o Octave não alcançou totalmente o MATLAB, veja as diferenças entre Octave e MATLAB
    • Como o professor Andrew Ng usou Octave nos primeiros MOOCs de machine learning, ele é útil se você estiver procurando materiais práticos e exemplos, playlist no YouTube
    • Usei Octave em vez de MATLAB na disciplina de análise numérica na graduação, 15 anos atrás, e, para o que fizemos na época, a compatibilidade da linguagem batia perfeitamente
    • Não sou usuário de MATLAB, mas dá para perceber que copiar só a linguagem não faz com que tudo do MATLAB esteja lá; MATLAB é uma suíte de software baseada em GUI, com muitos apps que podem ser usados sem programar, além de oferecer suporte oficial do fornecedor. Antigamente havia a percepção de que open source era algo estranho ou pouco confiável, mas isso vem mudando rapidamente nos últimos tempos
    • Scilab também é outro software inspirado no MATLAB, mas, em comparação com o Octave, foca mais em funcionalidade do que em compatibilidade
  • Para quem está ouvindo falar de JupyterLite pela primeira vez: é como o Jupyter Notebook/Lab tradicional, mas funciona totalmente no navegador; tudo roda no lado do cliente, sem necessidade de servidor ou backend
    • Python rodando sobre Web Assembly parece que deve ficar bem lento
  • Com a mesma tecnologia (ou seja, o "xeus-stack" link do xeus-stack), há uma variedade muito maior de linguagens/kernels que podem rodar no jupyterlite, como c++, python, R, lua e javascript. Para testar, veja Try Jupyter Lab ou a documentação do JupyterLite; se quiser fazer sua própria implantação, pode usar o repositório de template xeus-lite-demo
  • Octave é querido por muitos estudantes há muito tempo e tem sido uma alternativa essencial para alunos de graduação; é um bom exemplo de como o GNU contribuiu para o progresso da humanidade. É altamente recomendado para análise numérica, fácil de estender com GNU-Fortran ou GNU-C, e vem com vários recursos de extensão. É uma DSL especializada em computação numérica. De forma semelhante, Scilab também é um pacote recomendável, embora seja menos extensível
  • Sempre sinto que, entre os vários problemas mencionados pelo autor, o verdadeiro atrativo acaba ficando escondido. Acho que seria melhor se os diagramas viessem mais para o começo e se os recursos da próxima release e os problemas enfrentados para produzi-los fossem mais destacados
  • Sempre quis transpilar GNU Octave para outras linguagens. Octave já podia ser embutido como biblioteca C, e é possível consultar como embutir Octave em C/C++ e a documentação oficial de programas standalone. Também existe um pacote OpenCL com suporte a aceleração por GPU, veja o pacote OpenCL; infelizmente, ele não usa a GPU de forma implícita, mas sim por meio de tipos e funções de GPU explícitos, referência do oclArray, o que significa que não é uma estrutura em que você possa simplesmente rodar o código Octave existente na GPU. Seria ótimo se a aceleração por GPU baseada em OpenCL também fosse implementada no navegador, mas o WebCL ainda não chegou a esse ponto, veja documentos sobre WebCL, Khronos WebCL. Hoje, a tendência é que o WebCL seja substituído por WebGPU, veja como usar WebCL no Chrome, guia de padronização do gpuweb, documentação de Web APIs do Chrome.
    • Se eu for dizer o que sinto, é óbvio que a indústria insiste em abordagens comerciais em vez de soluções abertas evidentes por causa do lucro; basta olhar para a história de inúmeras inovações, como o LED azul. Se a IA reduzir um pouco a carga sobre os desenvolvedores, talvez possamos voltar a explorar esse caminho mais claro. Na prática, cada inovação tecnológica exige mais carga e uma curva de aprendizado maior dos desenvolvedores, enquanto a recompensa (salário inicial) permanece essencialmente estagnada. Se o pair programming com IA se disseminar, temo que isso acabe reduzindo a qualidade do código e produzindo codebases complexas em excesso.
    • Por isso me atraem métodos alternativos; por exemplo, abstrações verbosas em Python podem ser expressas em uma linha no Octave. Para ser ainda mais conciso, seria preciso ir para uma linguagem de montagem funcional como LISP, mas aí se abre mão da conveniência sintática das linguagens de array.
    • O ponto central é que o caminho que leva diretamente a uma IA no estilo J.A.R.V.I.S./Star Trek passa por DSLs como Octave/MATLAB e por ferramentas de lógica de negócios como planilhas dos anos 1980, HyperCard, Microsoft Access e FileMaker. Imagino que, se surgir uma ferramenta aberta como o Octave com aceleração por GPU, a eficiência na escrita de software aumentaria e isso talvez contribuísse diretamente para o avanço da IA