[syslinux] Module Versioning

Pete Batard pete at akeo.ie
Thu Mar 3 04:43:10 PST 2016


On 2016.03.03 04:37, H. Peter Anvin via Syslinux wrote:
> I don't think that is an issue.

Well, I didn't really want to mention it, because it's going to be more 
of a rant that anything else, but since this is being brought up, 
versioning detection and handling has very much been an issue for me in 
Rufus. As I mentioned in the summary of the patches I submitted 
recently, 6.03 pre has actually been a nightmare in that respect.

First, let me give you a quick breakdown of how Rufus handles ISO -> USB 
conversion of Syslinux.

Before the 5.x series, the .c32's were mostly compatible with any 
version of ldlinux.sys you would throw at them. This was great, because 
all I needed to do for ISO -> USB conversion was include the latest 
version of ldlinux.sys v4 in Rufus (about 36KB in size), install that on 
the USB, and, with a few exceptions that were no trouble to handle, the 
modules would just work.

Then 5.x came along, and now you couldn't expect an ldlinux.sys v5.x to 
work with modules from 5.y when x != y. Well, obviously I'm not going to 
embed every 5.x version of ldlinux.sys in Rufus, as I'm exceedingly size 
conscious, so, fine, I'll detect the version from ldlinux on the ISO 
(from isolinux.bin), and automate the download of a matching ldlinux.sys 
from my server. I'm not too happy about it (because, while Rufus itself 
is digitally signed, to ensure that tampering can be detected, I can 
imagine scenarios where governments who might want to go after tails 
users, and know that some of those may use Rufus to convert their tails 
ISO to USB, could intercept the ldlinux.sys download and replace it with 
a nefarious one), but I can live with that. Besides, using a download of 
ldlinux.sys has the side effect of forward compatibility: All I have to 
do to make existing versions of Rufus compatible with a yet to be 
released version of Syslinux, is place a copy of that new ldlinux.sys 
for the server.

And then the 6.03-pre came along...

Now, I'm *really* starting to get annoyed by this module incompatibility 
business, because not only are 6.x versions incompatible with 6.y 
modules, but even a 6.03-preN .sys can be incompatible with modules from 
6.03-preN+1! I have to say, I actually started to look into 
reverse-building an ldlinux.sys from the existing ldlinux.c32 on the ISO 
in Rufus (which I may actually still try to do in the future), as a 
possible solution to avoid this whole ordeal.

Moreover, because Syslinux is taking its sweet time to actually release 
a 6.03 (A pre/beta should not be extended for more than a few weeks 
before actual release, PLEASE!), distro maintainers all over the place 
are starting to use the pre's on their ISOs. This means I can't really 
brush the issue under the carpet, and must detect both the version and 
pre level, as well as multiply the ldlinux.sys files I host on my 
server. The end result is something like this, which is just for 
Syslinux 6.03:
http://rufus.akeo.ie/files/syslinux-6.03/

Oh, and of course you also need to cater for people who replace the 
standard Syslinux versioning scheme with their own stuff, which makes 
for an even more interesting breakdown. All in all, this means the 
Syslinux projects does get not so kind words when I commit the necessary 
changes in Rufus: 
https://github.com/pbatard/rufus/commit/0fceb3843370ddc2d4c1b1d8f57c2c132758e78b

So I have to second Ady here and indicate that, as far as I am 
concerned, 'A "version" such as "6.03" [is not] enough'. Maybe a nano, 
or something that is internal to Syslinux and gets increased for each 
pre, at the very least, could be introduced? It'd be really nice to have 
something in there, that people won't be inclined to change as they do 
with the version string, so that one doesn't have to figure out that the 
"20140721" string tails use in their isolinux.bin is really pre18 for 
instance...

Regards,

/Pete


More information about the Syslinux mailing list