This post would benefit greatly from using common terminology, or with some specific comparison to existing technologies. This article implies Arcan will fix the problems with the existing web, so giving a few examples of problematic Web behavior and how Arcan would fix it would be great. Some cases I'd like to read about:
- User opens a very old website (arcan-site?) which uses very old versions of browser standards. (In regular web, this is handled by browsers painstakingly added compatibility and quirks modes.)
- User opens the very newest website, which uses all the latest website standards, including new video codec, new font and new text rendering effect. (In regular web, this would only happen once most clients update to the very latest version of the browser, and telemetry says enough clients have updated)
If the answer to the question above is "Arcan will use a different external client for each", then how will those clients be managed? Is there going to be a allow-list of video codecs and text renderers hardcoded into the browser? Or any site can specify any requirement, and browser will just go fetch it automatically on first visit? Or will there be a user prompt ("This site uses LALA.Image codec which is not installed. [download and install] [go back]")? Oh, and those codecs/renderers, are they all Lua, or a native code?
- User comes to an artistic website whose author thinks purple on red is a great color schema. In current web, I'd use "reader mode", or a custom UserScript if I plan to go to website often. What happens in Arcan - is this up to the "decode client"? What if the site author chose a "decode client" which has no such functionality?
- User comes to a hostile website, which contains content they want to read, but also 78 tracker scripts which send data to 9000 partners and a cryptominer. In the regular web, this is where adblockers shine - the tracker scripts are external, so they are easily blocked, plus they are "plugins" so they can go and mess with page's code. What happens in Arcan world? Arcan has no dynamic loader, so all those 78 tracker scripts and cryptominer will be bundled into main app during "compile package sign" process, and presumably obfuscated as well. Does Arcan browser has a place for adblock? Where in the layers does it live? If it lives in "decode client", can website author choose the client which has no adblock functionality?
> User comes to an artistic website whose author thinks purple on red is a great color schema.
The outer app used as your desktop/browser-UI has two mechanisms at its disposal. The first is collaborative - it can convey the preferred colour-scheme so the 'page' you are browsing to can pick accordingly. That's actually how the terminal emulator and non-terminal shell both gets their colour schemes.
The other is enforced - just as tone mapping is needed on the composition level to deal with HDR, you can use the same facility to apply colour grading per 'page'. That's what I do to chrome right now without it knowing. If the average luminosity exceeds a threshold, it picks a colour map that enforces a dark mode regardless of what the browser wants. Similarly, if a game doesn't respond to resize requests but continues to provide a low 256x240 like output I apply an NTSC signal degradation shader pass into a CRT simulation one. By having it as a composition effect means that I can have my own view of colours, but if I 'share desktop' to someone else the original form is retained.
> - User opens the very newest website, which uses all the latest website standards, including new video codec, new font and new text rendering effect. (In regular web, this would only happen once most clients update to the very latest version of the browser, and telemetry says enough clients have updated)
It's similar to Android API_LEVELS. API breaks (we've had, I think two, since 2013) have been handled with a hook script that exposes the old behaviour. New video codec deployment is a bit special and there's a protocol level degradation path for that with a few nuances. It has mainly been used for hardware accelerated web cameras as a remote data source where it starts with direct pass-through of whatever streams it provides. If the client fails to decode (stream-cancel:reason=codec failure) it signals that and the source end reverts to a safer default from a hierarchy (h264 into zstd).
> In current web, I'd use "reader mode", or a custom UserScript if I plan to go to website often. What happens in Arcan - is this up to the "decode client"? What if the site author chose a "decode client" which has no such functionality?
Decode can be used for that but it is overkill. The hook-script facility (arcan -Hmyscript1.lua -Hmyscript2.lua myapp) can interpose every function the app has access to transparently. Reroute patterns like "load_image_asynch("something.jpg") into null_surface() there. These and other options like the set of encode/decode/permitted integration with allow-list of local software can* be preset per authentication key.
There is a PoC 'more than adblock' that uses an LLMed version of 'decode' in my bin of experiments. The first part is a hookscript that routes all image loading through a version of decode with a local classifier model asked to 'describe the contents of this image and tell me if it looks like an advertisment'. If not the default path applies. If yes it substitutes an image of puppies playing tug of war with a rubber chicken.
The idea behind Arcan was to find the crunchy middle between a display server, a game engine and a multimedia processor. The control plane to this [BSD] “desktop engine” was designed for a scripting API targeting entry-level developers. Lua remain as the weapon of choice for that role as a better follow up to the ‘BASIC’ of the home computer era..
Static.. means that the compiled app is not capable of loading code outside of its own package, except for a set of preset helper scripts.. user controlled opt-in rather than an opt-out as in “install extension to disable javascript”.. security model comes from a combination of least-privilege and capabilities. “Decode” is security wise the most sensitive one as that is where parsing of untrusted inputs go. “Encode” is privacy wise the most sensitive one as that is where the real ‘you’ distil into digital form.
Arcan is profoundly important tech. Bigger than Wayland.
The communications around it are really, really hard to follow.
I interviewed Mr Ståhl by email. I am not sure why his writing is so hard to read, but it is. I think he is so smart, he operates on a much higher level than us proles and it's hard to follow.
Et tu, Brute? Posit this. If you want to catch a rare kind of elusive fish that both has in-depth knowledge of a very niche topic and, rarer still, willingness to play for the greater good, how would you approach finding such a swimmer?
Failing to do so, that ticking clock, the tell-tale heart, means the engaging article will be an obit called 'Bowing Out'.
This post would benefit greatly from using common terminology, or with some specific comparison to existing technologies. This article implies Arcan will fix the problems with the existing web, so giving a few examples of problematic Web behavior and how Arcan would fix it would be great. Some cases I'd like to read about:
- User opens a very old website (arcan-site?) which uses very old versions of browser standards. (In regular web, this is handled by browsers painstakingly added compatibility and quirks modes.)
- User opens the very newest website, which uses all the latest website standards, including new video codec, new font and new text rendering effect. (In regular web, this would only happen once most clients update to the very latest version of the browser, and telemetry says enough clients have updated)
If the answer to the question above is "Arcan will use a different external client for each", then how will those clients be managed? Is there going to be a allow-list of video codecs and text renderers hardcoded into the browser? Or any site can specify any requirement, and browser will just go fetch it automatically on first visit? Or will there be a user prompt ("This site uses LALA.Image codec which is not installed. [download and install] [go back]")? Oh, and those codecs/renderers, are they all Lua, or a native code?
- User comes to an artistic website whose author thinks purple on red is a great color schema. In current web, I'd use "reader mode", or a custom UserScript if I plan to go to website often. What happens in Arcan - is this up to the "decode client"? What if the site author chose a "decode client" which has no such functionality?
- User comes to a hostile website, which contains content they want to read, but also 78 tracker scripts which send data to 9000 partners and a cryptominer. In the regular web, this is where adblockers shine - the tracker scripts are external, so they are easily blocked, plus they are "plugins" so they can go and mess with page's code. What happens in Arcan world? Arcan has no dynamic loader, so all those 78 tracker scripts and cryptominer will be bundled into main app during "compile package sign" process, and presumably obfuscated as well. Does Arcan browser has a place for adblock? Where in the layers does it live? If it lives in "decode client", can website author choose the client which has no adblock functionality?
see also: the reply to you in the web post.
> User comes to an artistic website whose author thinks purple on red is a great color schema.
The outer app used as your desktop/browser-UI has two mechanisms at its disposal. The first is collaborative - it can convey the preferred colour-scheme so the 'page' you are browsing to can pick accordingly. That's actually how the terminal emulator and non-terminal shell both gets their colour schemes.
The other is enforced - just as tone mapping is needed on the composition level to deal with HDR, you can use the same facility to apply colour grading per 'page'. That's what I do to chrome right now without it knowing. If the average luminosity exceeds a threshold, it picks a colour map that enforces a dark mode regardless of what the browser wants. Similarly, if a game doesn't respond to resize requests but continues to provide a low 256x240 like output I apply an NTSC signal degradation shader pass into a CRT simulation one. By having it as a composition effect means that I can have my own view of colours, but if I 'share desktop' to someone else the original form is retained.
> - User opens the very newest website, which uses all the latest website standards, including new video codec, new font and new text rendering effect. (In regular web, this would only happen once most clients update to the very latest version of the browser, and telemetry says enough clients have updated)
It's similar to Android API_LEVELS. API breaks (we've had, I think two, since 2013) have been handled with a hook script that exposes the old behaviour. New video codec deployment is a bit special and there's a protocol level degradation path for that with a few nuances. It has mainly been used for hardware accelerated web cameras as a remote data source where it starts with direct pass-through of whatever streams it provides. If the client fails to decode (stream-cancel:reason=codec failure) it signals that and the source end reverts to a safer default from a hierarchy (h264 into zstd).
> In current web, I'd use "reader mode", or a custom UserScript if I plan to go to website often. What happens in Arcan - is this up to the "decode client"? What if the site author chose a "decode client" which has no such functionality?
Decode can be used for that but it is overkill. The hook-script facility (arcan -Hmyscript1.lua -Hmyscript2.lua myapp) can interpose every function the app has access to transparently. Reroute patterns like "load_image_asynch("something.jpg") into null_surface() there. These and other options like the set of encode/decode/permitted integration with allow-list of local software can* be preset per authentication key.
There is a PoC 'more than adblock' that uses an LLMed version of 'decode' in my bin of experiments. The first part is a hookscript that routes all image loading through a version of decode with a local classifier model asked to 'describe the contents of this image and tell me if it looks like an advertisment'. If not the default path applies. If yes it substitutes an image of puppies playing tug of war with a rubber chicken.
* code being written as we speak.
2015 intro, https://www.youtube.com/watch?v=07nqZIFRDJg
What an unengaging and verbose article.
I hate to have to agree, but I do.
Arcan is profoundly important tech. Bigger than Wayland.
The communications around it are really, really hard to follow.
I interviewed Mr Ståhl by email. I am not sure why his writing is so hard to read, but it is. I think he is so smart, he operates on a much higher level than us proles and it's hard to follow.
I tried here:
https://www.theregister.com/2022/10/25/lashcat9_linux_ui/
Et tu, Brute? Posit this. If you want to catch a rare kind of elusive fish that both has in-depth knowledge of a very niche topic and, rarer still, willingness to play for the greater good, how would you approach finding such a swimmer?
Failing to do so, that ticking clock, the tell-tale heart, means the engaging article will be an obit called 'Bowing Out'.
LLMs can summarize or engage-ify these 3K human-authored words from Arcan developer, which conclude "Arcan as Operating System Design" (2021).
The intro video (20m) can motivate reading this deep dive technical series.