According to Dan Cross <cross@spitfire.i.gajendra.net>:
Maybe he's thinking of what's known as DLL Hell, which resultedQuite possibly! It's interesting to note that Linux has also
from Microsoft's neglecting to put a version number in DLL filenames. ... >>
suffered from similar issues, exacerbated by libraries that
don't handle versioning well. Containers were the solution.
That's kind of sad.
ELF library names include multi-part version numbers, with the plan being that
if the API changes you bump the major number, while if it's a bug fix or otherwise compatible you just bump the minor number.
Then you symlink the name
with the minor version number back to the name with just the major number so the
lists of imported library names just have the major number. This seems to work
OK on FreeBSD. What happens on linux?
One issue with this kind of version numbering is that adding a
feature is an API change but does not necessarily prevent
compatibility.
On 4/8/26 3:25 PM, John Levine wrote:
According to Dan Cross <cross@spitfire.i.gajendra.net>:
Maybe he's thinking of what's known as DLL Hell, which resultedQuite possibly! It's interesting to note that Linux has also
from Microsoft's neglecting to put a version number in DLL filenames. ... >>>
suffered from similar issues, exacerbated by libraries that
don't handle versioning well. Containers were the solution.
That's kind of sad.
ELF library names include multi-part version numbers, with the plan being that
if the API changes you bump the major number, while if it's a bug fix or
otherwise compatible you just bump the minor number.
One issue with this kind of version numbering is that adding a
feature is an API change but does not necessarily prevent
compatibility. This expression of versioning allows users
dependent on newer features to request the newer major version,
but it does not allow a newer major version to be used when it
is compatible (which might be desirable to reduce library bloat
or just not force installation of a different version).
While one could include a backward compatibility range (e.g.,
14-12 or 14b to indicate implementation of version 14 features
with compatibility back to version (b) to version 12), this
would still not maximize the compatibility support (which may
well not be a desirable goal).
Bug compatibility is also an issue as are leaky abstractions.
For ISAs, if early implementations use a stronger memory model
(or appear to do so), software could be written to exploit that
and be incompatible with future hardware.
One can also have performance (or non-time resource consumption) >incompatibilities, where the abstract architecture is the same
but some uses may be significantly impacted. E.g., an ISA might
initially not define a preferred register zeroing idiom and
software might choose any single cycle instruction that zeros a
register, but later implementations might only optimize one of
those options.
(A library function that moved from a O(nlogn) implementation to--- Synchronet 3.21f-Linux NewsLink 1.2
a O(logn) implementation with larger constant factor might
"break" software that calls the function N times rather than
once with an N-times larger list/array but be broadly considered
an improvement.)
Then you symlink the name
with the minor version number back to the name with just the major number so the
lists of imported library names just have the major number. This seems to work
OK on FreeBSD. What happens on linux?
I guess using minor version is tricky as it depends on the
specific implementation. The fourth bug fix version of Burzatt's >implementation of the 14th version of the libgood API would be
different than the fourth of Blinfoo's implementation. (There
could, in theory, be cooperation in minor versioning when a
common bug is discovered, but that seems unlikely.)
I guess the major version represents the abstract interface and
the minor version represents a "release number". With ISAs,
multiple resource-use targets (power-performance-area tradeoffs,
e.g.) might be pursued with the same abstract interface (the
original goal of Architecture), so specifying the interface
version number is not sufficient.
There may also be desirable for different implementations to
deprecate features (possibly where a feature technically works
but has poor resource use traits) or extend the lifetime of a
feature. E.g., an ISA version might specify that an opcode no
longer needs to be supported and can either generate an illegal
opcode exception or provide the legacy behavior while the
implementation could still claim to be of that version of the
ISA.
[I feel my mind is getting fuzzy, sleep is calling.]
On 4/8/26 3:25 PM, John Levine wrote:
According to Dan Cross <cross@spitfire.i.gajendra.net>:
Maybe he's thinking of what's known as DLL Hell, which resultedQuite possibly! It's interesting to note that Linux has also
from Microsoft's neglecting to put a version number in DLL filenames. ... >>>
suffered from similar issues, exacerbated by libraries that
don't handle versioning well. Containers were the solution.
That's kind of sad.
ELF library names include multi-part version numbers, with the plan being that
if the API changes you bump the major number, while if it's a bug fix or
otherwise compatible you just bump the minor number.
One issue with this kind of version numbering is that adding a
feature is an API change but does not necessarily prevent
compatibility. This expression of versioning allows users
dependent on newer features to request the newer major version,
but it does not allow a newer major version to be used when it
is compatible (which might be desirable to reduce library bloat
or just not force installation of a different version).
| Sysop: | Amessyroom |
|---|---|
| Location: | Fayetteville, NC |
| Users: | 65 |
| Nodes: | 6 (0 / 6) |
| Uptime: | 00:52:14 |
| Calls: | 862 |
| Files: | 1,311 |
| D/L today: |
10 files (20,373K bytes) |
| Messages: | 264,186 |