Društvo LJUDMILA
Rozmanova ulica 12
1000 Ljubljana
Slovenia
Prostori: osmo/za

Javascript OS

Introduction

Web browser based operating system, for developing rich HTML5 client-side applications.

View on GitHub

Web application server for storing and serving rich HTML5 client-side applications and data.

Based on object programming and JavaScript. Loose ancient crap (yes unix, you). Browser does a lot of stuff very well already.

Linux shell and Gtk suck. It is better to use web as a framework.

Provide infrastructure to do difficult things easily.

Not having full support for the entire spectrum of options currently available in the existing technology, let alone advancements and improvement, will hamper adoption.

Ideas:

  • easy to use Javascript object persistence that just works
  • URLs instead of file paths! (metadata about URLs can be nicely stored in RDF!)
  • persistent objects are uniquely identified with URLs. (like http://page_address#object_dom_id or something)
  • handle synchronizing of of data between same object instanced in different browsers on different hosts.
  • each web page (URL) on a server is a workspace, which can contain javascript applets. Applets are javascript objects (classes), which get (re)instantiated automatically, when workspace is reloaded.
  • a set of standard subclassable UI objects for creating applications
  • use some kind of RDF model for storage; protocol for talking to a web server in RDF/JSON; see also: MyRDF

Some references

  • Squeak
  • UIKit
  • OSX Dashboard
  • Visual basic
  • OS/2 Workplace Shell

Use cases

  • WDBI next generation
  • Web-based UNIX GUI frontend
    • file manager
    • various system control panels: users; webserver; fileserver
  • HTML Puppet Theatre
  • Translation application

Applets

  • text command console ☠
  • object inspector ☠
  • css editor (which can save changes!) ☠☠
  • sticky notes ☠
  • web browser (with sticky notes you can attach to pages) ☠☠
  • universal text editor (rich and plain text!) ☠☠☠
  • table/record viewer; skins+templates; data editing; data binding; see also: excel ☠☠☠
  • image+graphics viewer/editor ☠☠
  • object browser (with search!), list+icon view - like file manager, but more general, for javascript objects etc... ☠☠
  • chat between users visiting the page ☠
  • process node network display (things) ☠☠☠

Loginout

  • user_register(username,email,password)
  • user_login(username,password)
  • user_logout()
  • user_change_password(old_password,new_password)
  • user_reset_password(new_password) // need mail cookie
  • user_enable_account() // needs mail cookie
  • user_forgot_username(email)
  • user_forgot_password(email)
  • user_delete_account(sure?)

Functional parts

  • javascript libraries on other client stuff
  • RDF data store
  • content server (simple one included, one should be able to use 3rd party CMS, MediaWiki or drupal for example)
  • file server (for handling uploading and serving big files, etc...)

Dogmas

  • OS is the new hardware
  • one click installs
  • app running = url opening

v1

  • login logout
  • Install and uninstall stuff
  • entities: users, apps, documents (bookmarks, files)

standard view controllers

  • object inspector
  • text editor (rich and poor)
  • console

apps

  • dev (editor + resource manager)
  • shell - list of installed stuff
  • editor (word v 10 vrsticah :)
  • control panel

Model

  • obj = base object
    • shell = initial object (shell, object browser)
    • app = base object for apps
      • note = a simple persistent text field
      • run = a very simple application runner
      • chat = a simple, but nice chat (not ported yet)

<graphviz> digraph a {

 rankdir = LR
 node [shape="box"]
 object
 view
 controller
 model
 mapper
 moc
 view
 window
 app
 shell
 applet
 edge [arrowhead="empty"]
 model -> object;
 view -> object;
 controller -> object;
 window -> view;
 moc -> controller;
 app -> controller
 mapper -> controller;
 shell -> app;
 edge [arrowhead="vee"]
 moc -> model;  
 view -> DOMelement
 object -> mapper
 mapper -> moc
 app -> window

}

</graphviz>