3 คะแนน โดย GN⁺ 2024-07-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • WebVM รันสภาพแวดล้อม Linux ภายในเบราว์เซอร์ด้วย WebAssembly ทำให้สามารถจัดการไบนารี x86 ได้ฝั่งไคลเอนต์โดยไม่ต้องมีเซิร์ฟเวอร์
  • แกนหลักอย่าง CheerpX ประกอบการทำเวอร์ชวลไลเซชันบนเบราว์เซอร์ด้วย x86-to-WebAssembly JIT compiler, ระบบไฟล์เสมือนแบบ block-based และ Linux system call emulator
  • การประมวลผลเกิดขึ้นภายใน sandbox ของเบราว์เซอร์ และการรันไบนารี x86 ทำบนอุปกรณ์ของผู้ใช้ ไม่ใช่บนเซิร์ฟเวอร์
  • ตัวอย่างคำสั่งมี python3, gcc, objdump, vim, curl เป็นต้น และ curl --max-time 15 parrot.live ต้องใช้เครือข่าย
  • มีสภาพแวดล้อมทดลองแยกต่างหากคือ Alpine / Xorg / i3 WebVM และ BrowserCode เป็นรายการที่เกี่ยวข้องซึ่งรัน Claude Code ในเบราว์เซอร์

วิธีการทำงานของ WebVM

  • WebVM คือสภาพแวดล้อม Linux เสมือนที่ทำงานในเบราว์เซอร์ผ่าน WebAssembly
  • เอนจินพื้นฐานอย่าง CheerpX รันไบนารี x86 ภายใน sandbox ที่ปลอดภัย
    • การประมวลผลทั้งหมดเกิดขึ้น ฝั่งไคลเอนต์ อย่างสมบูรณ์

องค์ประกอบของการทำเวอร์ชวลไลเซชันบนเบราว์เซอร์ของ CheerpX

  • CheerpX มีองค์ประกอบต่อไปนี้สำหรับการทำเวอร์ชวลไลเซชันบนเบราว์เซอร์
    • x86-to-WebAssembly JIT compiler

      • ระบบไฟล์เสมือนแบบ block-based
      • Linux system call emulator

สภาพแวดล้อมทดลองและคำสั่งตัวอย่าง

  • ให้บริการ Alpine / Xorg / i3 WebVM เป็นสภาพแวดล้อมทดลอง WebVM แบบใหม่
  • ตัวอย่างพื้นฐานของ WebVM แนะนำคำสั่งต่อไปนี้
    • 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
      • คำสั่งนี้ต้องใช้ เครือข่าย

รายการที่เกี่ยวข้อง

  • BrowserCode เป็นรายการที่เกี่ยวข้องซึ่งรัน Claude Code ในเบราว์เซอร์ผ่าน WebAssembly

1 ความคิดเห็น

 
GN⁺ 2024-07-12
ความคิดเห็นจาก Hacker News
  • มีโปรเจกต์คล้าย ๆ กันอยู่อีกหลายตัว ฝั่ง VM มี https://copy.sh/v86/, https://bellard.org/jslinux/, https://jamesfriend.com.au/pce-js/ (https://github.com/jsdf/pce), https://www.pcjs.org/ โดยตัวสุดท้ายมีฮาร์ดแวร์และระบบปฏิบัติการให้เลือกเยอะ (https://github.com/jeffpar/pcjs)
    ฝั่ง Mac OS ก็มี 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/ ด้วย

    • พวกนี้เป็น emulator ทั้งระบบ ส่วน WebVM ใกล้เคียงกับ compatibility layer สำหรับไบนารี user space ที่ถูก emulate มากกว่า กล่าวคือเป็น “Linux system call emulator” จึงอยู่ในระดับที่สูงกว่าเล็กน้อย และเพราะแบบนั้นจึงค่อนข้างใช้ง่ายและยืดหยุ่นกว่า
    • https://exaequos.com
    • อยากรู้ว่า คอมพิวเตอร์ขั้นสูงที่สร้างใน Minecraft อยู่ตรงไหนบนสเกลความซับซ้อน เมื่อเทียบกับโปรเจกต์เหล่านี้และ WebVM
      https://duckduckgo.com/?q=comptuers+built+in+minecraft
  • โปรเจกต์ที่เป็นฐานดูเหมือนจะ ไม่ใช่โอเพนซอร์ส มีข้อความว่า “WebVM อิงจาก CheerpX build ที่เราโฮสต์ไว้ เราสนับสนุนให้ผู้ใช้ deploy WebVM เวอร์ชันของตัวเอง แต่ปัจจุบันยังไม่อนุญาตให้ self-host ตัวเอนจิน CheerpX เอง CheerpX build สาธารณะนี้ให้บริการตามสภาพ และใช้ฟรีสำหรับการสำรวจทางเทคนิค การทดสอบ และการใช้งานที่ไม่ใช่เชิงพาณิชย์ หากต้องการสร้างผลิตภัณฑ์บน CheerpX/WebVM โปรดติดต่อเรา”
    https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-...

    • น่าเสียดาย ตอนแรกคาดหวังไว้ แต่ตอนนี้หมดความสนใจในโปรเจกต์นี้แล้ว
  • เป็น lead developer ของ WebVM และ CTO ของ Leaning Technologies ถ้ามีคำถามก็จะตอบให้ แต่ที่นี่ค่อนข้างดึกแล้ว อาจต้องรออีกหลายชั่วโมง จะเข้าร่วม Discord ก็ได้: https://discord.gg/yTNZgySKGa

    • ขอบคุณที่เข้ามาร่วมตอบ อาจเป็นคำถามโง่ ๆ แต่สงสัยว่า ทำสิ่งนี้ไปทำไม อยากรู้ด้วยว่าคิด use case แบบไหนไว้ และอยากถามว่ามีเซิร์ฟเวอร์หรือช่อง IRC แทน Discord ไหม
      งานนี้เจ๋งมาก หวังว่าจะไม่ฟังดูเหมือนประชดเบา ๆ เพิ่มเติมคือเปิด vi แล้ว Esc ไม่ค่อยทำงาน ไม่แน่ใจว่าเป็นปัญหาของเบราว์เซอร์หรือเปล่า เลยไม่คิดว่าจะต้องพูดประโยค “ออกจาก vi ไม่ได้” ซ้ำอีกครั้ง
    • ชอบ WebVM และงานอื่น ๆ ของ Leaning Tech มาก อยากรู้ว่าส่วน networking ที่เป็น implementation สำหรับจัดการ lwIP เป็นโอเพนซอร์สหรือไม่
      เคยอ่านบทความเกี่ยวกับ networking ที่ลิงก์ไว้ก่อนหน้านี้แล้ว แต่อยากดูว่าใช้แนวทางแบบไหนอย่างเป็นรูปธรรม
    • ทดสอบบน Firefox บน Linux แล้วโดยรวมทำงานได้ดี แต่ คัดลอก·วาง ไม่ได้ ซึ่งอาจเป็นปัญหาค่อนข้างร้ายแรงสำหรับงานแก้ไขอย่างการเขียนโปรแกรม
      อีกอย่างคือบางครั้งหน้าจอค้างและไม่แสดงคีย์ที่พิมพ์ ปกติกด backspace แล้วหน้าจอจะกลับมา Firefox about:performance ไม่แสดง CPU usage ของแท็บนั้น และใน htop บน Linux ของเครื่องผม Firefox ก็ดูไม่ผิดปกติ
      มีคำถามด้วย เห็นว่าไฟล์ใหม่ยังคงอยู่แม้ปิดแท็บแล้วเปิดใหม่ แต่ยังไม่ได้ตรวจ localStorage หรืออย่างอื่นผ่าน developer tools อยากรู้ว่าใช้สิ่งนั้นหรือใช้ฟีเจอร์อื่นของเบราว์เซอร์ ไฟล์เหล่านี้คงอยู่ถาวรแค่ไหนกันแน่?
    • ขอบคุณสำหรับความพยายาม อยากรู้ว่ามี roadmap สำหรับ รองรับแอปพลิเคชัน GUI หรือไม่
    • สงสัยว่าเกี่ยวข้องกับ Tailscale หรือเปล่า อยากรู้ว่า Tailscale เป็นอะไรคล้ายพร็อกซีหรือไม่ มีตัวเลือกอื่นไหม และ Tailscale เป็นโอเพนซอร์สด้วยหรือเปล่า
      เห็นคำตอบอื่นแล้ว: https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
  • น่าจะแก้ชื่อเรื่องเป็นประมาณ “WebVM คือ WebAssembly VM ที่ทำงานในเบราว์เซอร์

  • buzzword เท่ดี สุดท้ายก็คือ สภาพแวดล้อมบรรทัดคำสั่ง Linux ที่รันในเบราว์เซอร์ และช้า

    • เห็นด้วย คำอธิบายตอนนี้กลับทำให้งงกว่าเดิม เลยสงสัยว่าเดี๋ยวนี้โค้ด JavaScript ที่เว็บเบราว์เซอร์รันก็นับเป็น “serverless” แล้วหรือเปล่า
  • มีข้อความว่า “CheerpX enables you to run existing 32-bit x86 native binaries” น่าแปลกที่ การรองรับ wasm64 ในเบราว์เซอร์ชะงักมาหลายปีแล้ว น่าเสียดาย

    • ฟีเจอร์ส่วนใหญ่ของ WebAssembly, WebGL, WebGPU ใช้เวลานานมากกว่าจะเข้ามาในเบราว์เซอร์ ต้องมองกันเกือบระดับ 10 ปี
  • การให้เครือข่ายผ่าน Tailscale ถือว่าฉลาด ช่วยเลี่ยงปัญหาที่อาจเกิดขึ้นได้หลายอย่าง

    • สำหรับการทำเครือข่ายภายในเบราว์เซอร์ การใช้ Tailscale เป็นวิธีแก้ที่ได้ผลที่สุด ก่อนหน้านี้เคยเขียนเรื่องนี้ไว้อย่างยาว: https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
  • รู้สึกว่าช้ากว่า https://bellard.org/jslinux/ มาก

    • ลองคอมไพล์และรัน mandelbrot.c เวอร์ชัน single-thread ของ benchmark game แล้ว jslinux ใช้เวลา 12 วินาที, ส่วน webvm ใช้เวลา 1.2 วินาที บนโฮสต์ที่ใช้ gcc flags เดียวกันใช้เวลา 0.03 วินาที
  • เจ๋งดี แต่การกดปุ่มมักไม่แสดงผล ทำให้ใช้งานจริงแทบไม่ได้ แม้มองเป็น use case สำหรับสภาพแวดล้อมพัฒนาโลคัลของ Web IDE ก็ยังดูไม่เร็วพอ
    node --version เร็วหลังจากรันครั้งแรก แต่การรัน JavaScript ช้ามาก:
    user@:~$ time node -e "console.log('Hello')"
    Hello
    real 0m7.693s
    user 0m0.012s
    sys 0m0.000s

  • สงสัยว่า use case ที่ใช้งานได้จริง ของของแบบนี้คืออะไร

    • เทคโนโลยีนี้ยืดหยุ่นมาก แค่นึกออกทันที ก็มีการศึกษาเรื่อง Linux, การเขียนโปรแกรม, ความปลอดภัย, เอกสารที่รันได้ สำหรับภาษาใด ๆ หรือไลบรารีไบนารีใด ๆ, การอนุรักษ์ซอฟต์แวร์และเกมในอดีต, การทำ virtualization ให้แอปองค์กรบน Windows รุ่นเก่า, สภาพแวดล้อมพัฒนาสำหรับ Web IDE เป็นต้น
      นี่เป็นแค่ตัวอย่างไม่กี่อย่าง และรายการอาจยาวกว่านี้มาก
    • ไม่ใช่ WebVM โดยตรง แต่มีตัวอย่างที่สร้างด้วย WebContainers คือ https://demo.graphweaver.com/
      มันรันเซิร์ฟเวอร์ Node.js และฟรอนต์เอนด์ภายในเบราว์เซอร์ ดังนั้นจึงสามารถดูได้ว่า Graphweaver ทำอะไรได้บ้างโดยไม่ต้องติดตั้งหรือรันอะไรบนคอมพิวเตอร์นอกจากเบราว์เซอร์ ตัวอย่างนี้รวมฐานข้อมูล SQLite เข้ากับ REST API และ Graphweaver ก็ให้บริการ GraphQL API จากผลลัพธ์นั้น