- File wiki/applications.wiki — part of check-in [44ebdb258a] at 2015-05-01 22:49:12 on branch trunk — More conversion to in-source wiki (user: bernd size: 3127)
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.
This of course begs the question of security: How can you securely execute code that comes from the Internet?
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).
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.
- 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