All Projects → plasma-umass → Browsix

plasma-umass / Browsix

Licence: other
Browsix is a Unix-like operating system for the browser.

Programming Languages

javascript
184084 projects - #8 most used programming language
typescript
32286 projects
HTML
75241 projects
shell
77523 projects
Dockerfile
14818 projects
Makefile
30231 projects

Projects that are alternatives of or similar to Browsix

Wordpress React
A React demo app tied to a WordPress backend with REST API
Stars: ✭ 81 (-96.86%)
Mutual labels:  javascript-framework
Frontend Hard Mode Interview
《前端内参》,有关于JavaScript、编程范式、设计模式、软件开发的艺术等大前端范畴内的知识分享,旨在帮助前端工程师们夯实技术基础以通过一线互联网企业技术面试。
Stars: ✭ 2,338 (-9.49%)
Mutual labels:  javascript-framework
A Keyboard
javascript keyboard
Stars: ✭ 160 (-93.81%)
Mutual labels:  javascript-framework
I Can Not React
The complete book on Reactjs. Live at:
Stars: ✭ 91 (-96.48%)
Mutual labels:  javascript-framework
Smart Webcomponents
Web Components & Custom Elements for Professional Web Applications
Stars: ✭ 110 (-95.74%)
Mutual labels:  javascript-framework
Torus
Torus is an event-driven model-view UI framework for the web, focused on being tiny, efficient, and free of dependencies.
Stars: ✭ 136 (-94.73%)
Mutual labels:  javascript-framework
Jib.js
A lightweight javascript run-time environment, with node.js compatiblity in mind
Stars: ✭ 50 (-98.06%)
Mutual labels:  javascript-framework
Enact
An app development framework built atop React that’s easy to use, performant and customizable.
Stars: ✭ 178 (-93.11%)
Mutual labels:  javascript-framework
Javascript Avanzado En Espanol
Esta es una traducción de la serie de libros de You Don't Know JS (book series), la cual es una serie de 6 libros que navegan profundamente en los mecanismos básicos y avanzados del lenguaje JavaScript. La primera edición de la serie está ahora completa.
Stars: ✭ 118 (-95.43%)
Mutual labels:  javascript-framework
Reactjs Interview Questions
List of top 500 ReactJS Interview Questions & Answers....Coding exercise questions are coming soon!!
Stars: ✭ 17,978 (+596.01%)
Mutual labels:  javascript-framework
Dataformsjs
🌟 DataFormsJS 🌟 A minimal JavaScript Framework and standalone React and Web Components for rapid development of high quality websites and single page applications.
Stars: ✭ 95 (-96.32%)
Mutual labels:  javascript-framework
Formql
FormQL - A framework for building dynamic forms in Angular
Stars: ✭ 110 (-95.74%)
Mutual labels:  javascript-framework
Vivid
a JavaScript library which is built to easily customize and use the SVG Icons with a blaze.
Stars: ✭ 1,797 (-30.43%)
Mutual labels:  javascript-framework
Tinyhttp
🦄 0-legacy, tiny & fast web framework as a replacement of Express
Stars: ✭ 1,259 (-51.26%)
Mutual labels:  javascript-framework
Hyperdom
A fast, feature rich and simple framework for building dynamic browser applications.
Stars: ✭ 161 (-93.77%)
Mutual labels:  javascript-framework
Web Audio Javascript Webassembly Sdk Interactive Audio
🌐 Superpowered Web Audio JavaScript and WebAssembly SDK for modern web browsers. Allows developers to implement low-latency interactive audio features into web sites and web apps with a friendly Javascript API. https://superpowered.com
Stars: ✭ 68 (-97.37%)
Mutual labels:  javascript-framework
Angular Interview Questions
List of 300 Angular Interview Questions and answers
Stars: ✭ 2,264 (-12.35%)
Mutual labels:  javascript-framework
Server Components
🔧 A simple, lightweight tool for composable HTML rendering in Node.js, based on web components.
Stars: ✭ 212 (-91.79%)
Mutual labels:  javascript-framework
Woowahanjs
웹 어플리케이션 개발을 위한 JS프레임워크
Stars: ✭ 171 (-93.38%)
Mutual labels:  javascript-framework
Kunafa
Easy to use, high level framework in Kotlin for front-end web-development
Stars: ✭ 148 (-94.27%)
Mutual labels:  javascript-framework

Browsix - Bringing Unix to the Browser

NPM version david-dm-status-badge david-dm-status-badge

While standard operating systems like Unix make it relatively simple to build complex applications, web browsers lack the features that make this possible. This project is Browsix, a JavaScript-only framework that brings the essence of Unix to the browser. Browsix makes core Unix features available to web applications (including pipes, processes, signals, sockets, and a shared file system) and extends JavaScript runtimes for C, C++, Go, and Node.js programs so they can run in a Unix-like environment within the browser. Browsix also provides a POSIX-like shell that makes it easy to compose applications together for parallel data processing via pipes.

For more details, check out our tech report (PDF).

Another way to think about this is that modern web applications are multi-process by nature - the client and some of the application logic lives in the browser, and some of it lives in the cloud, often implemented as microservices.

Browsix lets you rethink the boundary between code executing in the browser vs. server-side, while taking advantage of the multi-core nature of modern computing devices.

Browsix enables you to compose the in-browser part of your web applications out of processes. Processes behave as you would expect coming from Unix: they run in parallel with the main browser thread, can communicate over pipes, sockets, or the filesystem, and can create subprocesses. This process model is implemented on top of existing browser APIs, like web workers, so it works in all modern browsers. Browsix applications can be served statically or over a CDN.

The Browsix Shell

As a proof of concept, we've implemented a POSIX-like shell on top of Browsix, along with an implementation of a number of standard Unix utilities (cat, tee, echo, sha1sum, and friends). The utilities are all standard node programs that will run directly under node, or in the browser under Browsix. Individual commands are executed in their own workers, and piping works as expected:

shell

Try it out here: live demo!

Meme creator

Browsix is useful for more than web terminals. With Browsix, you can run Go microservices directly in the browser! As an example, we have implemented a meme creator, that lets you create memes (sometimes known as image macros) with (hopefully) humorous text on top of several images. We wrote this as a standard REST service in Go, accepting the text and image type as parameters, and returning a PNG. We used our modified GopherJS compiler to compile the Go service (including all dependencies, such as the TrueType font renderer and image manipulation libraries) to JavaScript, and Browsix to run this JavaScript as a process in a background Web Worker. We then dynamically route requests to either this in-browser server or a remote server depending on user agent and network connectivity.

Details

Browsix currently supports running node.js, Go, and C/C++ programs. It supports Go with a modified GopherJS compiler (requires a host Go 1.6 install for now), and C/C++ with modifications to Emscripten.

Browsix-SPEC

Browsix supports executing SPEC CPU2006 and SPEC CPU2017 benchmarks using Browsix-SPEC interface.

Using Browsix

There are two parts to Browsix: build tooling (the modified Go + C compilers) and runtime support (the kernel + Browsix APIs).

Get browsix through npm:

    $ npm install --save browsix

Building & Testing

Browsix requires nodejs 4.3.0 or later, which is more recent than the version packaged in Ubuntu Wiley. To get a recent version of node, follow the instructions on the node.js website. If you don't know whether you should choose node 4.x or 5.x, choose 4.x (it is the long-term support branch).

Browsix has three other dependencies: git, npm (usually installed along with node), and make, and builds on OSX and Linux systems. Once you have those dependencies:

    $ git clone --recursive https://github.com/plasma-umass/browsix
    $ cd browsix
    $ make test-once serve

This will pull the dependencies, build the runtime and all the utilities, run a number of tests in either Firefox or Chrome, and then launch a copy of the shell served locally.

Dockerfile

$ ./docker/build.sh
....
root@3695ed0cdf45:~/browsix# make test-once serve
  TEST
[13:07:00] Using gulpfile ~/browsix/gulpfile.js
[13:07:00] Starting 'copy-node-kernel'...
[13:07:00] Starting 'copy-node'...
[13:07:00] Starting 'lint-kernel'...
[13:07:00] Starting 'lint-browser-node'...
[13:07:00] Starting 'lint-bin'...
[13:07:00] Starting 'lint-syscall-api'...
[13:07:00] Finished 'copy-node-kernel' after 82 ms
[13:07:02] Finished 'lint-syscall-api' after 1.61 s
[13:07:04] Finished 'lint-kernel' after 3.72 s
[13:07:05] Finished 'lint-browser-node' after 4.46 s
[13:07:05] Finished 'lint-bin' after 5.08 s
[13:07:05] Starting 'build-bin'...
[13:07:06] Finished 'copy-node' after 5.16 s
[13:07:06] Starting 'build-kernel'...
[13:07:06] Starting 'build-browser-node'...
...

Building and using Browsix-SPEC

After building Browsix, build Browsix-SPEC through make:

make browsix-spec

Follow the instructions in browsix-spec.md.

In-browser node limitations

Browsix's browser-node implementation has an important to understand limitation: you must explicitly call process.exit(). Without this, utilities will work under real-node, but appear to hang under browser-node. This is not an intrinsic limitation, but it is a hairy implementation detail -- node exits when the event loop is empty, and there are no active timers or network callbacks. For us to do the same thing means we need to hook setTimeout and any other functions that take callbacks to ensure we don't exit early.

Documentation

For a high-level overview of the system design and architecture, please see this document.

Contributing

You're interested in contributing? That's great!

The process is similar to other open-source projects hosted on github:

  • Fork the repository
  • Make some changes
  • Commit your changes with a descriptive commit message
  • Open a pull request

Contact

If you have questions or problems, please open an issue on this repository (plasma-umass/browsix).

Open Source

This project is licensed under the MIT license, but also incorporates code from other sources.

Browsix uses BrowserFS for its filesystem, which is primarily MIT licensed.

browser-node's nextTick implementation comes from the acorn project, released under the MIT license.

A large portion of browser-node is the node standard library, which is MIT licensed.

Functions to convert buffers to utf-8 strings and back are derivative of browserify implementations (ported to TypeScript), MIT licensed as well.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].