[Top-posting considered harmful. *cough*] On Thu, Jan 2, 2014 at 12:40 PM, B Harder <brad.har...@gmail.com> wrote: > On 1/2/14, Richard Hipp <d...@sqlite.org> wrote:
>> The silly requirement of some distributions that *everything* must be a >> shared library irks me beyond words. I hate having to support >> --disable-internal-sqlite, and I hate having to add silly work-arounds in >> the code to accommodate distributions trying to use an older SQLite with a >> newer Fossil. This impedes progress and introduces bugs. It's a lose-lose >> situation. And yet the distributions are dogmatic on this point. >> >> It's maddening. It makes my hair turn gray. It irks me more than seeing >> the noun "data" used as a plural. Utter madness! >> >> But we live in a fallen world. We have to do it. Please go ahead and >> merge..... > > _WHY_ does --disable-internal-sqlite (and the unknown versions of > SQLite that follow) have to be supported ? > > If package/OS maintainers insist on hacking in alien shared-lib > SQLite, let them own their hacks and the repercussions. > > Call it a major version# bump, and remove that support. > I never did research this for y'all. "I should do that..." Again... My understanding, as an external observer of some FOSS Linux/Unix distributions (primarily / especially Debian), e.g. *not* as someone currently actively involved in maintaining a distribution, packaging software for it, etc, is that distributions want to minimize the number of different and distinct source-code copies of a given chunk of software (a library for instance) found amongst all the pieces of software they distribute. They want to minimize the number of source-code copies to make it easier for them to maintain all the different software packages in the distribution, by insuring that if a given piece of software needs to change (say to update it to a new version to provide new functionality, or to patch a bug (especially a security-related bug!) in an existing version that causes the software or something depending on / using the software to malfunction), they (ideally at least) only have to change the software in one place, and then update as necessary any and all other software depending on the newly-changed software to use that newly-changed version. (If the newly-changed software maintains the same ABI as the previous version of it, this might require no changes at all, or at most a change in the packaging meta-information; if there is an ABI change but the API stays the same this will probably require a re-compilation and re-linking; if there is an API change this might require changes to the source code of the other software to accommodate the API changes.) One way they minimize the number of source-code copies of software, particularly of software that is used by other software (e.g. such as a library like SQLite), is to require the shared software to be linked in as a shared (e.g. not a binary or source-code embedded) library to all the other software making use of it. I think that, if I were ever to do the required research (which, again, I have not done to date), I would find that most major FOSS Linux/Unix distributions, and quite likely many of the commercial / closed-source distributions (I speak here not merely of RHEL, SUSE, etc but also of Solaris, HP-UX, AIX, etc), are ... I won't say dogmatic about this point, but quite serious at the least about it, precisely because it makes their lives easier and because they see it as a benefit to their end-users. I think it is not a point they would give up lightly. I realize this is likely to be a quite different viewpoint / world view than those coming from the embedded software world or from the MS Windows (and probably also Apple OS/X) world have, and I suspect also commercial / closed-source software provided for various FOSS and non-FOSS Unix/Linux distributions, because in those worlds it is common for every piece of application software to ship its own private copy of any library it requires (other than libraries which can be guaranteed to be provided by the OS vendor). Further, in the embedded software world at least, I expect it is often difficult or even impossible to update software in the first place to patch bugs or provide new functionality, so there is no need much less desire to worry about making it *easier* to update software; if you can't update it at all, or can only update it in the first place with the very greatest of effort for only the most critical of reasons (such as bugs which are potentially life-threatening or would cost untenable financial losses if they are not fixed), who cares if it's a only a little more difficult, relatively speaking, to update a library. Anyway. Insofar as SQLite intends and desires to be capable of use as a shared non-embedded library *as well as* a non-shared embedded library for software running on Unix/Linux platforms, I expect this policy (as I've asserted it to be) of the FOSS Unix/Linux distributions will affect SQLite and application software making use of SQLite such as Fossil. If Fossil removes support for using SQLite as a shared library, I expect the distributions will either (1) re-add that support to the version of Fossil they package (with potentially each major/non-derivative distribution doing it a separate way); (2) fork Fossil (again, with potentially each major/non-derivative distribution doing it a separate way) at the point where support is removed and henceforth distribute their forked version of Fossil (possibly but not necessarily merging in patches providing updated or new features and functionality from Original Fossil); or (3) stop distributing Fossil themselves as being unsupportable by them, at which point the only source of pre-compiled binaries for end-users of Fossil on FOSS Unix/Linux distributions will likely be fossil-scm.org. (This might or might not be seen by you as desirable; I'm not in a position to speculate on that.) I'll grant that it is possible that instead (4) the distributions allow Fossil to be and treat it as a special case, but I suspect this is unlikely at best. Questions: First, does Fossil (or at least *versioned*, e.g. non-tip-of-tree releases of Fossil) use only versioned amalgamations of SQLite? Or instead are versioned releases of Fossil allowed to use whatever the current tip-of-tree, non-versioned amalgamation release of SQLite is? Second, does SQLite in its versioned-release amalgamation form provide a means for the application software using / linked to it to query the amalgamated SQLite for its internal version? If these questions are both true (e.g. versioned Fossil releases use only versioned amalgamations of SQLite, and versioned SQLite releases provide a means for the application software using it to query it for its version), then it seems to me the simplest solution would be to have each versioned Fossil release query the SQLite it is using (be it a shared library one or an amalgamated / compiled-in one) for the SQLite's version, and if that version does not match the version of the amalgamated SQLite shipped with the versioned Fossil release have the Fossil release immediately terminate with an error message of something like "Unsupported version of SQLite in use; this version of Fossil is only supported for version XYZZY of SQLite" (where
_______________________________________________ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users