3 điểm bởi GN⁺ 2024-07-12 | 1 bình luận | Chia sẻ qua WhatsApp
  • WebVM chạy môi trường Linux trong trình duyệt dựa trên WebAssembly, cho phép xử lý các tệp nhị phân x86 ở phía client mà không cần máy chủ
  • Nền tảng cốt lõi CheerpX cấu thành ảo hóa trình duyệt với trình biên dịch JIT từ x86 sang WebAssembly, hệ thống tệp dựa trên khối ảo và trình giả lập lời gọi hệ thống Linux
  • Việc thực thi diễn ra בתוך sandbox của trình duyệt, và các tệp nhị phân x86 được chạy trên thiết bị người dùng thay vì trên máy chủ
  • Các lệnh ví dụ gồm python3, gcc, objdump, vim, curl, v.v.; curl --max-time 15 parrot.live cần kết nối mạng
  • Một môi trường trải nghiệm riêng là Alpine / Xorg / i3 WebVM cũng được cung cấp, và BrowserCode là mục liên quan chạy Claude Code trong trình duyệt

Cách WebVM hoạt động

  • WebVM là môi trường Linux ảo chạy trong trình duyệt thông qua WebAssembly
  • Engine nền tảng CheerpX chạy các tệp nhị phân x86 trong một sandbox an toàn
    • Toàn bộ quá trình thực thi diễn ra hoàn toàn ở phía client

Cấu thành ảo hóa trình duyệt của CheerpX

  • CheerpX bao gồm các thành phần sau để ảo hóa dựa trên trình duyệt
    • Trình biên dịch JIT từ x86 sang WebAssembly

      • Hệ thống tệp dựa trên khối ảo
      • Trình giả lập lời gọi hệ thống Linux

Môi trường trải nghiệm và các lệnh ví dụ

  • Alpine / Xorg / i3 WebVM được cung cấp như một môi trường trải nghiệm WebVM mới
  • Ví dụ WebVM mặc định gợi ý các lệnh sau
    • python3 examples/python3/fibonacci.py
    • gcc -o helloworld examples/c/helloworld.c && ./helloworld
    • objdump -d ./helloworld | less -M
    • vim examples/c/helloworld.c
    • curl --max-time 15 parrot.live
      • Lệnh này cần kết nối mạng

Mục liên quan

  • BrowserCode là mục liên quan chạy Claude Code trong trình duyệt thông qua WebAssembly

1 bình luận

 
GN⁺ 2024-07-12
Ý kiến trên Hacker News
  • Có thêm một vài dự án tương tự. Về phía VM thì có https://copy.sh/v86/, https://bellard.org/jslinux/, https://jamesfriend.com.au/pce-js/ (https://github.com/jsdf/pce), https://www.pcjs.org/ và cái cuối cùng có rất nhiều phần cứng lẫn hệ điều hành (https://github.com/jeffpar/pcjs)
    Về phía Mac OS thì cũng có https://infinitemac.org/ (https://blog.persistent.info/2023/03/infinitemac-dot-org.htm...), https://jamesfriend.com.au/projects/basiliskii/BasiliskII-wo..., https://jamesfriend.com.au/pce-js/pce-js-apps/

    • Đây là các trình giả lập toàn hệ thống, còn WebVM gần với một lớp tương thích cho các binary không gian người dùng được giả lập hơn. Nói cách khác, nó là một “trình giả lập system call Linux”, nên ở mức cao hơn một chút và vì thế cũng dễ dùng, linh hoạt hơn
    • https://exaequos.com
    • Tôi tò mò không biết những máy tính cao cấp được xây dựng bên trong Minecraft sẽ nằm ở đâu trên thang đo độ tinh vi so với các dự án này và WebVM
      https://duckduckgo.com/?q=comptuers+built+in+minecraft
  • Có vẻ dự án nền tảng không phải mã nguồn mở. Có ghi rằng: “WebVM dựa trên bản dựng CheerpX do chúng tôi lưu trữ. Chúng tôi khuyến khích người dùng triển khai phiên bản WebVM của riêng họ, nhưng hiện tại không cho phép self-host chính engine CheerpX. Bản dựng CheerpX công khai này được cung cấp nguyên trạng và miễn phí cho mục đích khám phá kỹ thuật, thử nghiệm và sử dụng phi thương mại. Nếu bạn muốn xây dựng sản phẩm trên CheerpX/WebVM, hãy liên hệ với chúng tôi”
    https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-...

    • Tiếc thật. Ban đầu tôi còn thấy háo hức, giờ thì mất hứng với dự án này rồi
  • Tôi là trưởng nhóm phát triển WebVM và cũng là CTO của Leaning Technologies. Nếu có câu hỏi tôi sẽ trả lời, nhưng bên tôi đang khá khuya nên có thể phải vài tiếng nữa. Cũng có thể tham gia Discord: https://discord.gg/yTNZgySKGa

    • Cảm ơn vì đã tham gia. Có thể là câu hỏi ngớ ngẩn, nhưng tôi muốn biết vì sao lại làm thứ này. Tôi cũng tò mò về những trường hợp sử dụng mà các bạn đang hình dung, và muốn hỏi liệu có máy chủ hay kênh IRC nào thay cho Discord không
      Công việc này rất ấn tượng. Hy vọng câu hỏi không bị nghe như đang mỉa mai nhẹ. Nhân tiện, tôi mở vi lên thì phím Esc không hoạt động tốt, không rõ do trình duyệt hay gì khác, nên không ngờ lại phải lặp lại câu “không thể thoát khỏi vi”
    • Tôi thực sự thích WebVM và các công việc khác của Leaning Tech. Tôi muốn hỏi liệu phần triển khai xử lý lwIP trong phần networking có phải mã nguồn mở không
      Tôi đã đọc bài viết về networking mà bạn liên kết trước đó, nhưng muốn xem cụ thể các bạn đã tiếp cận theo cách nào
    • Tôi đã thử trên Firefox của Linux, nhìn chung hoạt động tốt, nhưng copy-paste không chạy nên điều đó có thể khá nghiêm trọng cho các tác vụ chỉnh sửa như lập trình
      Ngoài ra thỉnh thoảng màn hình bị đứng và không hiện input từ bàn phím. Thường thì nhấn backspace sẽ làm màn hình hoạt động lại. Trong about:performance của Firefox không thấy mức dùng CPU của tab đó, và trong htop Linux trên máy tôi thì Firefox cũng không có vẻ gì bất thường
      Tôi cũng có một câu hỏi. Tôi thấy các file mới vẫn được giữ lại ngay cả khi đóng tab rồi mở lại, dù tôi chưa kiểm tra localStorage hay gì đó bằng công cụ nhà phát triển. Không biết các bạn dùng cái đó hay một tính năng trình duyệt khác. Những file này thực sự bền vững đến mức nào?
    • Cảm ơn vì nỗ lực này. Tôi muốn biết có lộ trình hỗ trợ ứng dụng GUI hay không
    • Tôi tò mò liệu nó có liên quan đến Tailscale không. Tailscale có phải kiểu proxy không, có lựa chọn nào khác không, và Tailscale có phải mã nguồn mở không
      Tôi đã thấy câu trả lời khác: https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
  • Có lẽ nên sửa tiêu đề thành kiểu “WebVM là một VM WebAssembly chạy trong trình duyệt

  • Từ thông dụng nghe hay đấy. Nhưng rốt cuộc đây là một môi trường dòng lệnh Linux chạy trong trình duyệt, và nó chậm

    • Đồng ý. Cách mô tả hiện tại còn gây rối hơn. Giờ thì đến cả mã JavaScript do trình duyệt web chạy cũng được xem là “serverless” sao
  • Có ghi rằng “CheerpX enables you to run existing 32-bit x86 native binaries”. Kỳ lạ là hỗ trợ wasm64 của trình duyệt đã đình trệ suốt nhiều năm, thật đáng tiếc

    • Hầu hết các tính năng WebAssembly, WebGL, WebGPU đều mất thời gian cực lâu mới vào được trình duyệt, gần như phải tính theo đơn vị 10 năm
  • Việc cung cấp mạng bằng Tailscale là một ý tưởng thông minh. Nó giúp né được một vài vấn đề tiềm ẩn

  • Cảm giác chậm hơn rất nhiều so với https://bellard.org/jslinux/

    • Tôi đã biên dịch và chạy bản đơn luồng của mandelbrot.c trong benchmark game, và jslinux mất 12 giây, còn webvm mất 1,2 giây. Trên máy host với cùng cờ gcc thì mất 0,03 giây
  • Khá ngầu, nhưng việc nhập phím thường xuyên không hiện nên thực tế rất khó dùng. Ngay cả khi xem đây là môi trường phát triển cục bộ cho Web IDE thì cũng không có vẻ đủ nhanh
    node --version thì nhanh sau lần chạy đầu tiên, nhưng việc thực thi JavaScript rất chậm:
    user@:~$ time node -e "console.log('Hello')"
    Hello
    real 0m7.693s
    user 0m0.012s
    sys 0m0.000s

  • Tôi tò mò trường hợp sử dụng thực tiễn của kiểu này là gì

    • Công nghệ này rất linh hoạt. Chỉ cần nghĩ ngay cũng có thể kể ra Linux, lập trình, giáo dục bảo mật, tài liệu có thể thực thi cho ngôn ngữ hoặc thư viện nhị phân bất kỳ, bảo tồn phần mềm và trò chơi lịch sử, ảo hóa ứng dụng doanh nghiệp Windows cũ, môi trường phát triển cho Web IDE, v.v.
      Đây chỉ là vài ví dụ, và danh sách còn có thể dài hơn nhiều
    • Không phải chính WebVM, nhưng một ví dụ được tạo bằng WebContainers là https://demo.graphweaver.com/
      Nó chạy máy chủ Node.js và frontend ngay trong trình duyệt, nên bạn có thể xem Graphweaver làm được gì mà không cần cài đặt hay chạy bất kỳ thứ gì ngoài trình duyệt trên máy tính. Ví dụ này kết hợp cơ sở dữ liệu SQLite với REST API, và Graphweaver cung cấp GraphQL API từ kết quả đó