Applications
This is also yet very incomplete
The main idea here is that the browser is the OS for applications. In
a P2P network, you don't have servers which perform the applications, and
"lightweight" terminals which just display the result. You need to
distribute the programs just like any other object. The main purpose for
applications is to display content.
Content is (structured) text, images, videos, music, etc.
Turing creep
There's a phenomenon I call "Turing creep": Any environment strives to
become Turing complete, i.e. it will in the long run contain a Turing complete
language, accessible by the user. Even if you try to remove the Turing
completeness (like in PDF, the predecessor PostScript was TC), it will creep in
through the backdoor (PDF has now JavaScript macros).
Therefore, you better start with a Turing complete language. To be more
precise: An efficient TC language. People will otherwise spend an
enormous amount to make the inefficient language efficient, or add an efficient
subset (see for example JavaScript and asm.js).
This of course begs the question of security: How can you securely execute
code that comes from the Internet?
Secure execution
The following options have been tried, and some of them failed more
spectacularly than others:
- Execute code in a controlled VM (e.g. Java). This is broken by design, you can't secure something from the inside.
- Execute code in a sandbox. This has been shown to be way more robust; it is much harder to break out of a sandbox.
- Public inspection of code: This is the free software approach. The underhanded C context shows that public inspection is tricky. Especially large code bases are problematic.
- Scan for known evil. This is the security industry's approach, and it is broken.
- Code signing is also a scam - it can work together with public inspection, but using it for accountability doesn't work.
Therefore the method of choice is to execute public inspected and signed
code in a sandbox (signed by the inspectors is the important part).
Output Abstraction
The low-level output abstraction (least common denominator) available on
today's platforms is OpenGL ES 2.0. Yes, there is Windows Phone, which
has essentially the same capabilities, but not the same framework. All
relevant data can be rendered using OpenGL: Fonts, images, videos are OpenGL
textures, the glue for displaying these textures are triangles and GL shader
language code. This can provable display everything we want to display
today.
Frameworks used
- libsoil for images (PNG+JPEG)
- freetype-gl for fonts (TrueType/OpenType)
- OpenMAX on Android, gstreamer on Linux for rendering videos
- MINOΣ2: Lightweight OpenGL-based widget library in Forth