= App insulation =
We want application developers to be able to develop for Ubuntu without spending all of their time dealing with the fast pace of change in the platform.
'''Contact:''' JonathanLange/JamesWestby
<
>
'''On Launchpad:''' ## Link to a blueprint, milestone or (best) a bug tag search across launchpad-project
## Consider clarifying the feature by describing what it is not?
== Rationale ==
Application developers currently have to deal with the following things:
* A new release of Ubuntu every six months
* Arbitrary changes in the platform in every release with little communication.
* No guarantee of consistency across releases.
* Little support for pushing newer versions of libraries back in to stable releases.
This means that you can be expected to target four or more releases of Ubuntu to reach all users. The oldest release doesn't have the latest and greatest in it (perhaps obviously,) and there is little support for updating libraries to bring that to old releases. That means that you have a choice between providing the lowest common denominator, or providing a different experience on each release.
Even if you try and target the same code at each release, you find that there are differences in two releases that mean you can't even have source level compatibility without a lot of work (e.g. python-gtk vs. pyGI.) Further within six months there will be a new Ubuntu release, and it's hard to know what the changes will be in that release without tracking it closely for the whole six months.
The upshot of this is that some application developers have to treat each release of Ubuntu as a different platform, putting many off trying to target Ubuntu at all.
While we should work to find solutions to these root causes, we should also look to alleviate the problem by allowing developers to target an environment that is insulated from the base system, meaning that you can target that and it will work across several Ubuntu releases.
== Stakeholders ==
## Who really cares about this feature? When did you last talk to them?
|| Name || Interest || Last consulted ||
== User stories ==
## These are a collection of things that users want to do, and why they want to do them. Try very, very hard to phrase them in terms of user needs rather than implementation details.
=== Controlling my dependencies ===
'''As an ''' application developer<
>
'''I want ''' to be able to target a single environment that works across Ubuntu releases<
>
'''so that ''' I can develop just for that environment, rather than every Ubuntu release individually<
>
## Have as many as you like. Group user stories together into meaningfully deliverable units. They can then be used as the driving elements of exploratory testing.
== Constraints and Requirements ==
=== Must ===
* Provide a better environment for third party application developers to work in
* Be something we can support over time
=== Nice to have ===
## What would be nice to have, but is not essential
=== Must not ===
* Significantly decrease the security of our users
* Be fragile (e.g. breaking every time we do a security update in an LTS.)
* Slow down our ability to innovate in the platform such that Ubuntu becomes obsolete in a few years time
=== Out of scope ===
## Things that people might think are in scope, but are actually not.
== Subfeatures ==
## Other specs that form a part of this one.
== Measures of success ==
## How will we measure how well we have done?
== Thoughts? ==
The following ideas should be explored for doing this:
1. Define and support an SDK ABI
* Documentation
1. Keep old libraries
* Keep a copy of previous libraries in newer releases for apps to depend on
* would also need work to support e.g. multiple versions of Python libraries
1. Statically Link libraries
* Only works naturally for compiled apps, but something analogous could be done for other things
* Concerns about security, disk footprint, memory footprint.
1. Keep LTS chroot
* tell third party developers to target the latest LTS and have those apps run in that environment while Ubuntu updates every six months
1. Per-App chroot
* e.g. via arkose
=== Related projects ===
* https://launchpad.net/arkose
* AppReviewBoard