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