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

Rationale

Application developers currently have to deal with the following things:

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

Name

Interest

Last consulted

User stories

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

Constraints and Requirements

Must

Nice to have

Must not

Out of scope

Subfeatures

Measures of success

Thoughts?

The following ideas should be explored for doing this:

  1. Define and support an SDK ABI
    • Documentation
  2. 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
  3. 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.
  4. 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
  5. Per-App chroot
    • e.g. via arkose

AppInsulation (last edited 2011-11-21 23:14:28 by 74-220-xxx-116)