Affiliation:
1. University of Massachusetts Amherst, Amherst, MA, USA
Abstract
Applications written to run on conventional operating systems typically depend on OS abstractions like processes, pipes, signals, sockets, and a shared file system. Porting these applications to the web currently requires extensive rewriting or hosting significant portions of code server-side because browsers present a nontraditional runtime environment that lacks OS functionality.
This paper presents Browsix, a framework that bridges the considerable gap between conventional operating systems and the browser, enabling unmodified programs expecting a Unix-like environment to run directly in the browser. Browsix comprises two core parts: (1) a JavaScript-only system that makes core Unix features (including pipes, concurrent processes, signals, sockets, and a shared file system) available to web applications; and (2) extended JavaScript runtimes for C, C++, Go, and Node.js that support running programs written in these languages as processes in the browser. Browsix supports running a POSIX shell, making it straightforward to connect applications together via pipes.
We illustrate Browsix's capabilities via case studies that demonstrate how it eases porting legacy applications to the browser and enables new functionality. We demonstrate a Browsix-enabled LaTeX editor that operates by executing unmodified versions of pdfLaTeX and BibTeX. This browser-only LaTeX editor can render documents in seconds, making it fast enough to be practical. We further demonstrate how Browsix lets us port a client-server application to run entirely in the browser for disconnected operation. Creating these applications required less than 50 lines of glue code and no code modifications, demonstrating how easily Browsix can be used to build sophisticated web applications from existing parts without modification.
Funder
National Science Foundation
Facebook Graduate Fellowship
Publisher
Association for Computing Machinery (ACM)
Reference16 articles.
1. The multikernel
2. Operating system benchmarking in the wake of lmbench
3. S. Doeraene. Scala.js: Type-Directed Interoperability with Dynamically Typed Languages. Technical report École polytechnique fédérale de Lausanne 2013. S. Doeraene. Scala.js: Type-Directed Interoperability with Dynamically Typed Languages. Technical report École polytechnique fédérale de Lausanne 2013.
4. M. Fogleman. fogleman/gg: Go Graphics - 2D rendering in Go with a simple API 2016. https://github.com/fogleman/gg. M. Fogleman. fogleman/gg: Go Graphics - 2D rendering in Go with a simple API 2016. https://github.com/fogleman/gg.