How do URLs work under the hood?

Representation

Since it is impossible to go from user space to ring 0 in a typed manner, we have to use some weakly typed representation (that is, we can't use an enum, unless we want to do transmutations and friends). Therefore, we use a string-like representation when moving to kernel space. This is basically just a raw pointer to a C-like, null-terminated string. To avoid further overhead, we use more efficient representations:

Url<'a>

The first of the three representations is the simplest one. It consists of a struct containing two fat pointers, representing the scheme and the reference respectively.

OwnedUrl

This is a struct containing two Strings (that is, growable, heap-allocated UTF-8 string), being the scheme and the reference respectively.

CowUrl<'a>

This is a Copy-on-Write (CoW) URL, which, when mutated, gets cloned to heap. This way, you get efficient conditional allocation of the URL.

Not much fanciness here.

Opening a URL

Opening URLs happens through the OPEN system call. OPEN takes a pascal style string, and two pointer-sized integers, keeping the open flags and the file mode, respectively.

The path argument of OPEN does not have to be a URL. For compatibility reasons, it will default to the file: scheme. If otherwise specified, the scheme will be resolved by the registrar (see The root scheme), and then opened.

TODO