~

Roadmap

Improve Backward Compatibility

Summary

As it stands, every Kelvin change breaks backward compatibility, requiring app devs to publish modified code so their users can keep the app running. This needs to happen less frequently over time, until eventually apps can be "write once, run forever."

The first step is to build scaffolding into the kernel so that compatibility shims can be added when a breaking change is released, so that app developers won't need to change their code to keep their apps running on newer kernels.

Even once it's possible to build a shim to run old apps, not every breaking change will include such a shim -- sometimes we will want to break backward compatibility, either because the shim would be unacceptably complex, or because we need to deprecate an old piece of functionality, especially something insecure or that would get int he way of scaling the network.

Within the next few years, we need to get to the point where future changes never necessitate deprecating old functionality. This requires stabilizing the interface the kernel presents to applications, so that old features are worth committing to maintaining, and future changes to the interface will be small enough that writing shims is not onerous.

The interface can only be stabilized once a userspace permissioning system has been deployed, since it adds a new security layer, and we don't want to maintain old apps that don't have that security. Before the interface can stabilize, apps also need an interface for publishing and requesting data to and from other ships that could plausibly be implemented by the kernel in a scalable manner -- the "subscription reform" project aims to provide this scalability.

Projects

Current

Agents in Clay

start date

2022-07-06

end date

2022-12-01

This project overhauls Arvo's upgrade system to make it simpler and more reliable. Since it moves the locus of control of agents from Gall to Clay, it's often referred to as the "Agents in Clay" project.

Current

Shims for Userspace Code Over Old Kelvins

duration

2 Months

end date

2023-02-01

As it stands, every Kelvin change breaks backward compatibility, requiring app devs to publish modified code so their users can keep the app running. This needs to happen less frequently over time, until eventually apps can be "write once, run forever."

Current

Solid-State Publications

start date

2022-10-25

end date

2023-01-15

For scalability, basic solid-state publications are being prototyped. This is the next step after basic remote scry toward scalable data publishing on Urbit. These prototypes live in userspace; once we've proven the model with some real-world examples, we can build kernel support into Gall.

Current

Userspace Permissioning

end date

2023-03-01

Kernel and applications are both unprotected against malicious applications until userspace permissioning is added.

Next Up

Basic Remote Scry Protocol

duration

1-2 Months

start date

2021-01-01

end date

2023-01-15

The "Fine" remote scry protocol will form the foundation of scalable content distribution in Urbit, by allowing many subscriber ships to read data efficiently from a publisher ship without incurring excessive load on the publisher.

Next Up

Typed Paths

duration

1 Week

Typed paths should improve performance and developer experience, and it could unblock a typed interface to publications.

Future

Better Arvo/Vere Version Negotiation

duration

TBD

owner

TBD

Improving the Arvo/Vere version negotiation will increase release rate by reducing the amount of work it takes to release a new Kelvin version.

Future

Clean up Clay %cares

duration

2 Months

Clay's filesystem querying API is cumbersome to use and difficult to implement properly. A cleaner API would support remote scry better, would be easier for developers to integrate with, and would be less bug-prone.

Future

Dependent Hoon Demo

duration

3 Months

A version of Hoon with a dependent type system could make the type system easier to understand, improving developer experience.

Future

Desk-Based Namespacing

duration

3-6 Months

owner

TBD

Desk-based namespacing should improve reliability, maintenance, and developer experience.

Future

+mink Stack Trace Determinism

duration

TBD

owner

TBD

If code run inside the `+mink` metacircular evaluation function in the Hoon standard library, which runs all userspace code, errors out deterministically (i.e. hits a trivial infinite loop in the Nock spec), then `+mink` catches the error and retursns a stack trace.

Future

Add +on-rift or Similar For Userspace Breach Handling

duration

1 Month

owner

TBD

Applications often have bugs when a peer breaches. Modifying the userspace/kernelspace API to give Gall agents clearer information about breaches should improve application reliability and developer experience.

Future

Typed Interface to Solid-State Publications

duration

4-8 Months

A typed interface to solid-state publications should improve developer experience and performance (by avoiding runtime typechecks and type coercions).

Future

Versioned Pokes and Subscriptions

duration

4-8 Months

owner

TBD

Standardizing application protocol versioning in the kernel should improve developer experience and lead to more applications behaving correctly across upgrades, thereby improving user experience too.

Future

Zapgal Security

duration

1 Month

owner

TBD

Turning off the `!<` ("zapgal") rune in userspace will reduce the security attack surface of the kernel, reducing the kernel's vulnerability to attack by malicious applications.