doc/elf-jar-handling.txt
author Shawn Walker <shawn.walker@oracle.com>
Sat, 16 Jul 2011 08:45:13 -0700
changeset 2468 ce77b64883c4
parent 33 c475e7f3eab8
permissions -rw-r--r--
18710 conditional dependencies can cause install and uninstall failure when dependency cannot be installed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     1
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     2
pkg
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     3
ELF (AND MAYBE JAR) DEPENDENCY HANDLING
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     4
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     5
ELF files give us ISA information, required libraries with versions, and
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     6
potentially provided interface versions.  This latter information is
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     7
missing from a large set of libraries on OpenSolaris, built without
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     8
versioned interfaces.
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     9
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    10
It seems that an ELF file, on upload, can be tested for its ELF
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    11
dependencies, and that these files in turn can be tested for presence.
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    12
If any of the latter file's revisions provide versions, then these can
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    13
be tested and translated into a minimum package requirement for the
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    14
package containing the introduced ELF file.
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    15
4
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    16
We always want the latest version surface, so we don't want to send a
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    17
new header file without the corresponding ELF objects its changes caused
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    18
to be generated.
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    19
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    20
It seems that ELF differences are only useful for determining whether an
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    21
incoming transaction is significant.  For instance, RE delivers a group
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    22
of change that actually contains no change to the non-ELF files, and the
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    23
change to the ELF files is non-ELF significant.  In this case, perhaps
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    24
the delivery should fail/warn.
71c3260bcb8d added thoughts about use of ELF comparisons/hashes
sch@rosseau
parents: 2
diff changeset
    25
33
c475e7f3eab8 actually include elf.c; move pkg-modules to just modules; hoist utility modules
Stephen Hahn <sch@sun.com>
parents: 10
diff changeset
    26
XXX Can we do something similar for JAR files?  Tasting JAR files is
c475e7f3eab8 actually include elf.c; move pkg-modules to just modules; hoist utility modules
Stephen Hahn <sch@sun.com>
parents: 10
diff changeset
    27
outlined in $SRC/cmd/file/file.c:zipfile(), since a JAR file is a zip
c475e7f3eab8 actually include elf.c; move pkg-modules to just modules; hoist utility modules
Stephen Hahn <sch@sun.com>
parents: 10
diff changeset
    28
file with extra header information. [1]
2
953f9b67983e add initial service manifest
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    29
10
5bd49c138227 speculation about module versioning in non-ELF cases
"Stephen Hahn <sch@sun.com>"
parents: 4
diff changeset
    30
XXX Can we do something similar for Perl or Python (or any language with
5bd49c138227 speculation about module versioning in non-ELF cases
"Stephen Hahn <sch@sun.com>"
parents: 4
diff changeset
    31
internal versioning statements)?
5bd49c138227 speculation about module versioning in non-ELF cases
"Stephen Hahn <sch@sun.com>"
parents: 4
diff changeset
    32
5bd49c138227 speculation about module versioning in non-ELF cases
"Stephen Hahn <sch@sun.com>"
parents: 4
diff changeset
    33
XXX There's really no way to tie the kernel to libc in the current
5bd49c138227 speculation about module versioning in non-ELF cases
"Stephen Hahn <sch@sun.com>"
parents: 4
diff changeset
    34
system, or in pkg(1M).  Should we be adding a simple signature, or
5bd49c138227 speculation about module versioning in non-ELF cases
"Stephen Hahn <sch@sun.com>"
parents: 4
diff changeset
    35
reusing library versioning, or must it be left to a human (expressing it
5bd49c138227 speculation about module versioning in non-ELF cases
"Stephen Hahn <sch@sun.com>"
parents: 4
diff changeset
    36
via pkg(1M) dependencies)?
33
c475e7f3eab8 actually include elf.c; move pkg-modules to just modules; hoist utility modules
Stephen Hahn <sch@sun.com>
parents: 10
diff changeset
    37
c475e7f3eab8 actually include elf.c; move pkg-modules to just modules; hoist utility modules
Stephen Hahn <sch@sun.com>
parents: 10
diff changeset
    38
[1] Sun Microsystems, Inc., JAR File Specification,
c475e7f3eab8 actually include elf.c; move pkg-modules to just modules; hoist utility modules
Stephen Hahn <sch@sun.com>
parents: 10
diff changeset
    39
    http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html