Hi all, while upgrading the usb-modeswitch package to 1.2.0 [0] (currently in "beta"), I noticed that it is now embedding the "jimtcl" interpreter [1]: at build- time, the usb-modeswitch "dispatcher" (currently written in Tcl), can now be embedded in a binary that contains: a tailored jimtcl interpreter, the dispatcher's tcl code and wrapping bits. The resulting binary is self- contained and functionally equivalent to interpreting the tcl usb-modeswitch- dispatcher.
Let's also note as context that the goal of this trick (AFAIUI) is to avoid having a tcl interpreter pulled up to first CDs; as usb-modeswitch is part of the standard desktop installs (trough dependencies/recommendations), this imposes the presence of tcl on the first Ubuntu CD [2]. Additionally, this means that upstream can continue hacking in tcl instead of migrating to a compiled language. [0] http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.2.0beta.tar.bz2 [1] http://jim.berlios.de/ [2] https://bugs.launchpad.net/ubuntu/+source/usb-modeswitch/+bug/679256 == Issues == Now I see at least those issues with the proposed approach: * code duplication: the shipped jimtcl is 0.71, where upstream released 0.72 already. jimtcl 0.71 is also already shipped as part of the openocd [3] package. So shipping one more copy of it in usb-modeswitch's source doesn't sound. * binary-embedding: as it's proposed, the jimtcl code gets compiled as part of the usb-modeswitch-dispatcher binary. This essentially means that for any jimtcl update (be it as embedded code or as separate binary), a binNMU of usb- modeswitch is required. [3] http://packages.qa.debian.org/openocd == Propositions == So in order to solve this smartly, I think there are basically 5 possibilities: 1) "Forget about jimtcl, rely on existing tcl interpreters" This is mostly "repacking to avoid the embedded jimtcl copy", "no packaging of it, go on as is done currently; by relying on existing tcl interpreters. Pros: easy, straightforward,avoids the binary embedding of jimtcl. Cons: does not solve the "desktop install needs tcl interpreter". 2) "Allow interpretation using separate jimtcl" This means packaging jimtcl and allow usb-modeswitch to depend on it (That, plus "repacking to avoid the embedded jimtcl copy") Pros: relatively easy, avoids the binary embedding of jimtcl. Cons: replaces the need of the desktop install on a "tcl interpreter" to "jimtcl". Although it's probably smaller. 3) "Embed jimtcl using the internal copy" This means taking the upstream tarball as is. Pros: small standalone -dispatcher binary. Cons: code duplication, potential security issues with out-of-date jimtcl versions, … 4) "Embed jimtcl using a standalone package" This means packaging jimtcl and do some build-time trickery to include the jimtcl static library (if possible, only the needed parts) into usb- -modeswitch-dispatcher. Pros: small standalone -dispatcher binary, no code duplication. Cons: binNMU needed at each jimtcl upgrade, static linkeage. 5) "Rewrite the usb-modeswitch-dispatcher in C" This work has already been done by Mathieu Trudel-Lapierre for the Ubuntu ackage. For now, the upstream developer hasn't included this rewrite into the upstream package (for his own set of reasons). My current strategy is to avoid as much as possible to diverge from upstream, hence why it's not in Debian's usb-modeswitch for now. Pros: No tcl interpreter needed. Cons: as it's not an upstream effort, it can become out-of-sync in terms of functionality and bugfixes (and indeed currently is as of 1.2.0~beta). For now and before the enlightenments of d-devel, I think that I would order the solutions as following: 2 1 4 5 3 What's your opinion ? Thanks in advance, and cheers, OdyX
signature.asc
Description: This is a digitally signed message part.