3 điểm bởi GN⁺ 2025-10-21 | 1 bình luận | Chia sẻ qua WhatsApp
  • Xeus-Octave vừa gia nhập hệ sinh thái kernel JupyterLite, cho phép chạy trực tiếp mã GNU Octave ngay trong trình duyệt
  • GNU Octave là ngôn ngữ tính toán khoa học mã nguồn mở tương thích Matlab, và dự án này đã chuyển nó để chạy trong môi trường WebAssembly (WASM)
  • Để giải quyết mã nền Fortran và vấn đề phụ thuộc BLAS/LAPACK, nhóm đã sử dụng chuỗi công cụ tùy chỉnh kết hợp LLVM Flang, Emscripten và Netlib LAPACK
  • Do LLVM vẫn chưa hỗ trợ Fortran Common Block, nhóm đã tạm thời xử lý bằng bản vá tạm thời, trước khi hỗ trợ chính thức dự kiến có trong LLVM 22
  • Nhờ đó, JupyterLite mở rộng hỗ trợ từ R sang cả Octave, đánh dấu một bước quan trọng trong việc mở rộng hệ sinh thái lập trình khoa học trên nền trình duyệt

Tổng quan về Xeus-Octave và bản chuyển sang WebAssembly

  • Xeus-Octave là kernel Jupyter cho phép chạy mã GNU Octave trong trình duyệt, được đóng gói thông qua emscripten-forge
    • GNU Octave là ngôn ngữ miễn phí và mã nguồn mở có thể chạy trực tiếp các script Matlab
    • Với lần tích hợp này, người dùng có thể dùng ngay trong môi trường JupyterLite mà không cần cài đặt riêng
  • Tương tự cách làm của Xeus-R-Lite được phát triển trước đó, dự án sử dụng chuỗi công cụ biên dịch mã Fortran (LLVM Flang + Emscripten)
  • Với các thư viện phụ thuộc cho tính toán toán học của Octave, nhóm chọn Netlib LAPACK thay vì OpenBLAS để tăng khả năng tương thích khi build

Các thách thức kỹ thuật trong quá trình build WebAssembly

  • Lỗi build trong LLVM phát sinh do vấn đề hỗ trợ Fortran Common Block (Common Symbol Block)
    • Wasm streamer của LLVM v20 chưa triển khai common symbol, nên cần chỉnh sửa mã
    • Nhờ sự hợp tác giữa đội QuantStack và Serge Guelton, LLVM đã được vá tạm thời để xử lý dưới dạng weak symbol
  • Hỗ trợ chính thức dự kiến sẽ được đưa vào bản phát hành LLVM v22, và phiên bản LLVM đã vá hiện được công bố cho Linux
  • Bản thân Octave cũng được chỉnh sửa để phù hợp với mục tiêu WASM, bao gồm vô hiệu hóa tính năng GUIhợp nhất chữ ký hàm Fortran

Tích hợp và trình diễn Xeus-Octave

  • Sau khi hoàn tất build, chỉ cần thêm recipe emscripten-forge là có thể chạy Xeus-Octave trong JupyterLite
    • Có thể xem trình diễn biểu đồ theo thời gian thực trong demo notebook
  • Xeus-Octave được xây dựng trên Xeus, framework kernel Jupyter viết bằng C++, cho phép chạy và trực quan hóa các lệnh Octave ngay trong trình duyệt

Kế hoạch tiếp theo

  • Bước tiếp theo là tích hợp hệ sinh thái gói của Octave vào conda-forge và emscripten-forge
    • Nhóm dự định điều chỉnh tiện ích pkg của Octave cho môi trường trình duyệt để định nghĩa quy trình cài đặt trong môi trường conda
  • Qua đó, môi trường lập trình khoa học và toán học trên nền trình duyệt được kỳ vọng sẽ tiếp tục được tăng cường

Những người đóng góp chính và bối cảnh

  • Nhà phát triển chính Isabel Paredes thuộc QuantStack, trước đây từng phụ trách đưa ngôn ngữ R và framework ROS sang WebAssembly
  • Emscripten-forge do Thorsten Beier dẫn dắt, với sự tham gia của nhiều cộng tác viên như Anutosh Bhat, Martin Renou và những người khác
  • JupyterLite hiện do Jeremy Tuloup bảo trì, còn Xeus do Johan Mabille làm trung tâm bảo trì
  • Xeus-Octave được phát triển bởi Giulio Girardi và Antoine Prouvost

1 bình luận

 
GN⁺ 2025-10-21
Ý kiến trên Hacker News
  • Nếu đây là lần đầu bạn nghe về Octave, thì Octave là một bản sao gần như hoàn chỉnh mã nguồn mở của phần mềm thương mại MATLAB xem chi tiết trên Wikipedia
    • Cách nói "bản sao gần như hoàn chỉnh" có hơi cường điệu; dù tôi thích phần mềm mã nguồn mở, nhưng nếu làm các tác vụ nâng cao hơn thì vẫn có cảm giác Octave chưa hoàn toàn bắt kịp MATLAB, tham khảo khác biệt giữa Octave và MATLAB
    • Vì khóa MOOC machine learning thời kỳ đầu của giáo sư Andrew Ng dùng Octave, nên nếu bạn tìm tài liệu thực hành và ví dụ thì nó khá hữu ích, playlist YouTube
    • Khoảng 15 năm trước khi còn học đại học, tôi đã dùng Octave thay cho MATLAB trong môn phân tích số, và với những gì chúng tôi làm khi đó thì khả năng tương thích ngôn ngữ là hoàn toàn ổn
    • Tôi không phải người dùng MATLAB, nhưng có thể thấy chỉ sao chép ngôn ngữ thôi không có nghĩa là sẽ có đủ mọi thứ của MATLAB; MATLAB là một bộ phần mềm dựa trên GUI, bao gồm nhiều ứng dụng có thể dùng mà không cần viết mã, và còn có cả hỗ trợ chính thức từ nhà cung cấp. Trước đây từng có cảm nhận rằng mã nguồn mở hơi kỳ quặc hoặc khó tin cậy, nhưng gần đây lĩnh vực này cũng đang thay đổi rất nhanh
    • Scilab cũng là một phần mềm khác mô phỏng MATLAB, nhưng so với Octave thì nó tập trung vào khía cạnh tính năng hơn là khả năng tương thích
  • Để giải thích cho ai lần đầu nghe về JupyterLite: nó giống Jupyter Notebook/Lab truyền thống, nhưng chạy hoàn toàn chỉ trong trình duyệt; không cần máy chủ hay backend, mọi thứ đều chạy phía client
    • Có vẻ Python chạy trên Web Assembly sẽ khá chậm
  • Với cùng công nghệ đó (tức là "xeus-stack" liên kết xeus-stack), có nhiều ngôn ngữ/kernel hơn rất nhiều có thể chạy trong jupyterlite, ví dụ như c++, python, R, lua, javascript, v.v.; nếu muốn thử thì xem Try Jupyter Lab hoặc tài liệu JupyterLite, còn nếu muốn tự triển khai thì có thể dùng repo mẫu xeus-lite-demo
  • Octave từ lâu đã được rất nhiều sinh viên yêu thích và đóng vai trò là lựa chọn thay thế thiết yếu cho sinh viên đại học; đây là một ví dụ tốt về đóng góp của GNU cho sự phát triển của nhân loại. Rất đáng khuyến nghị cho phân tích số, cũng dễ mở rộng bằng GNU-Fortran hay GNU-C, và đi kèm nhiều tính năng mở rộng. Đây là một DSL chuyên biệt cho tính toán số. Tương tự, Scilab cũng là một gói đáng giới thiệu, nhưng khả năng mở rộng kém hơn
  • Tôi luôn cảm thấy rằng, giữa các vấn đề đa dạng mà tác giả đề cập, sức hút thực sự lại bị che lấp. Sẽ tốt hơn nếu sơ đồ được đưa lên phía trước hơn một chút, và các tính năng của bản phát hành tiếp theo cùng những vấn đề trong quá trình tạo ra chúng được làm nổi bật hơn
  • Tôi luôn muốn transpile GNU Octave sang ngôn ngữ khác. Octave vốn đã có thể được nhúng dưới dạng thư viện C, và có thể tham khảo cách nhúng Octave trong C/C++ cùng tài liệu chính thức về chương trình độc lập. Ngoài ra còn có gói OpenCL hỗ trợ tăng tốc GPU, xem gói OpenCL, nhưng đáng tiếc là nó không tận dụng GPU một cách ngầm định mà cung cấp kiểu GPU và hàm một cách tường minh; điều này thể hiện qua tham chiếu oclArray, nghĩa là không phải cấu trúc cho phép chạy nguyên mã Octave hiện có trên GPU. Sẽ rất hay nếu tăng tốc GPU dựa trên OpenCL cũng được triển khai trong trình duyệt, nhưng WebCL vẫn chưa đạt đến mức triển khai thực tế, xem tài liệu liên quan đến WebCL, Khronos WebCL; hiện tại xu hướng là WebCL đang được thay thế bởi WebGPU, xem cách dùng WebCL trong Chrome, hướng dẫn chuẩn hóa gpuweb, tài liệu Web API của Chrome.
    • Nếu phải nói thẳng cảm nhận của mình, thì rõ ràng việc ngành công nghiệp cố chấp với các cách làm thương mại thay vì giải pháp mở là vì lợi nhuận; chỉ cần nhìn vào lịch sử của vô số đổi mới như đèn LED xanh là đủ thấy. Nếu AI giúp giảm bớt gánh nặng cho lập trình viên, tôi hy vọng người ta có thể quay lại khám phá những con đường rõ ràng như thế. Thực tế là mỗi lần công nghệ đổi mới lại đòi hỏi lập trình viên gánh thêm nhiều áp lực và đường cong học tập cao hơn, trong khi đãi ngộ (mức lương khởi điểm) về thực chất vẫn dậm chân tại chỗ. Nếu pair programming với AI lan rộng, tôi cũng lo rằng chất lượng mã có thể đi xuống và các codebase phức tạp sẽ bị tạo ra hàng loạt.
    • Vì vậy tôi bị thu hút bởi các phương pháp thay thế; chẳng hạn những tầng trừu tượng dài dòng trong Python có thể được biểu đạt chỉ bằng một dòng trong Octave. Nếu muốn ngắn gọn hơn nữa thì phải chuyển sang ngôn ngữ kiểu functional assembly như LISP, nhưng như vậy lại phải từ bỏ sự tiện lợi cú pháp của ngôn ngữ mảng.
    • Cốt lõi là tôi nghĩ con đường dẫn thẳng tới AI kiểu J.A.R.V.I.S./Star Trek chính là các DSL như Octave/MATLAB và các công cụ logic nghiệp vụ từng được dùng trong thập niên 1980 như Spreadsheets, HyperCard, Microsoft Access, FileMaker. Nếu xuất hiện một công cụ như Octave mở có tăng tốc GPU, thì hiệu suất viết phần mềm sẽ tăng lên và biết đâu còn đóng góp trực tiếp cho sự phát triển của AI
    • Tôi thật sự đồng cảm với câu chuyện về phương pháp thay thế, DSL, và tất cả những điều này, xem bài viết liên quan