Supporting multiple LSB runtimes

Matt Taggart <[email protected]> Tue, 23 Dec 2003 02:40:30 -0800
Newsgroups gmane.linux.lsb.discuss
Message-ID <[email protected]>
Hi lsb-discuss and lsb-futures,

AJ Towns and I had a discussion about how Debian is going to implement an LSB 
2.0 runtime. We had some thoughts that have implications for LSB upstream and 
other runtimes. Here's what we came up with.

Requirements
============
1.) Runtime implementations need to be able to support more than one
  version at a time to allow for applications that need the different
  versions. Example: LSB 1.2, 1.3 and 2.0
2.) Currently runtime support for a version of the LSB implies support
  for all previous versions, and applications can count on that.
  Example: you should be able to run a 1.2 application on a 1.3 system
3.) There may be a need to break the backward compatibility defined in
  #2, if so runtimes will need to be able support multiple versions.
  Example: LSB 3.0 breaks some ABIs and applications that require
  older versions will not work in a 3.0 only environment,
  implementations need to support pre-3.0 as well as post 3.0 runtimes
4.) Runtimes will have a need to deprecate support for versions of the
  LSB. Example: Distro has to support LSB 2.0, 2.1, and 2.2 and wants
  to drop support for 1.3
5.) LSB applications should be able to coexist. Example: App1 shouldn't
  have mutually exclusive dependencies with App2

Observations
============
* Due to #2, applications will need either a dependency on the keystone
  package or maybe a versioned dependency if they require a particular
  version. Examples: "Depends: lsb" or "Depends: lsb >= 1.3"
* Due to #3 and #1, the keystone packages for the different supported
  versions will need to have different names. Examples:
    lsb-1.3, lsb-2.0 or lsb, lsb2 or ...
* Due to #2 and the above, different keystone packages will provide
  support for different releases. Example:
    Package: lsb  Provides: 1.2, 1.3, 2.0, 2.1, 2.2
    Package: lsb3 Provides: 3.0
* In order to support depecation(#4), applications will need to
  explicitly depend on a version of the LSB, either via a versioned
  depend or depend on a different package name as above. Example:
    Depend: lsb >= 1.3
    Depend: lsb3
* Applications should never hardcode a versioned dependency.
  Example: any two of these could not be installed at the same time
    App1  Depend: lsb = 1.3.1
    App2  Depend: lsb = 1.3.3
    App3  Depend: lsb = 1.3.3-1 (distro version number)
* Some applications will be able to support multiple non-backward
  compatible LSB versions, like if they didn't depend on the particular
  ABI that broke. Example: Depend: lsb >= 1.3 | lsb3

Questions
=========
* How often will breaking the ABI happen?
   Can't be predicted but assumed >0
* How often should deprecation be allowed?
   Need feedback from the runtime and application providers
* How should the multiple keystone packages be named?
* What keystone package names should LSB applications depend on?

Potential Solutions
===================
A.) Only when the ABI needs to break.
    Package: lsb  supports: 1.2, 1.3, 2.0, 2.1, 2.2
    Package: lsb3 supports: 3.0
    Package: lsb3.1 supports: 3.1 (oops we broke it)
    Package: lsb4 supports: 4.0, 4.1 ...

B.) Every major version.
    Package: lsb  supports: 1.0, 1.1, 1.2, 1.3
    Package: lsb2 supports: 2.0, 2.1, 2.1, 2.2 ... 2.6
    Package: lsb3 supports: 3.0, 3.1 ...

C.) Every minor version.
    Package: lsb-1.1  supports: 1.1
    Package: lsb-1.2  supports: 1.2
    Package: lsb-1.3  supports: 1.3
    Package: lsb-2.0  supports: 2.0
    Package: lsb-2.1  supports: 2.1

(Note: The packages above may be real packages or implemented as virtual 
packages, the key is that they exist for applications to depend on.)

I would like to see these questions answered and a recommendations documented 
in the spec to help runtime and applications implementors do the right thing.

I think this needs to be done before releasing LSB 2.0.

Thanks,

-- 
Matt Taggart
[email protected]