November 10, 2012 Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
What's the best way to achieve binary compatibility on Linux? For example, if I compile an application on, say Ubuntu 12.04, it will most likely not run on any older versions of Ubuntu but it will run on future versions.
My current approach to solve this is to compile the application in the oldest version of Ubuntu I can find, in this case 6.x. This is starting to get a bit problematic:
* The integration with VirtuaBox (I'm running Ubuntu as a guest) is pretty bad
* DMD won't run of out of the box, I need to compile it. This is also making DVM basically useless
* I can't clone the dlang repositories due to having a very old version of git installed
* I can't compile git, I haven't investigated in why but probably due to the system is too old
Is there some compiler/linker flags I can use when building to make the executable compatibility with older versions of Linux?
Or is there a better way to solve this?
--
/Jacob Carlborg
|
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | Am 10.11.2012 16:40, schrieb Jacob Carlborg:
> What's the best way to achieve binary compatibility on Linux? For
> example, if I compile an application on, say Ubuntu 12.04, it will most
> likely not run on any older versions of Ubuntu but it will run on future
> versions.
>
> My current approach to solve this is to compile the application in the
> oldest version of Ubuntu I can find, in this case 6.x. This is starting
> to get a bit problematic:
>
> * The integration with VirtuaBox (I'm running Ubuntu as a guest) is
> pretty bad
> * DMD won't run of out of the box, I need to compile it. This is also
> making DVM basically useless
> * I can't clone the dlang repositories due to having a very old version
> of git installed
> * I can't compile git, I haven't investigated in why but probably due to
> the system is too old
>
> Is there some compiler/linker flags I can use when building to make the
> executable compatibility with older versions of Linux?
>
> Or is there a better way to solve this?
>
I guess the right answer is to have everything compiled statically, especially if you need compatibility across distributions.
--
Paulo
|
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paulo Pinto | On 10 November 2012 17:39, Paulo Pinto <pjmlp@progtools.org> wrote: > Am 10.11.2012 16:40, schrieb Jacob Carlborg: > >> What's the best way to achieve binary compatibility on Linux? For example, if I compile an application on, say Ubuntu 12.04, it will most likely not run on any older versions of Ubuntu but it will run on future versions. >> >> My current approach to solve this is to compile the application in the oldest version of Ubuntu I can find, in this case 6.x. This is starting to get a bit problematic: >> >> * The integration with VirtuaBox (I'm running Ubuntu as a guest) is >> pretty bad >> * DMD won't run of out of the box, I need to compile it. This is also >> making DVM basically useless >> * I can't clone the dlang repositories due to having a very old version >> of git installed >> * I can't compile git, I haven't investigated in why but probably due to >> the system is too old >> >> Is there some compiler/linker flags I can use when building to make the executable compatibility with older versions of Linux? >> >> Or is there a better way to solve this? >> > > I guess the right answer is to have everything compiled statically, especially if you need compatibility across distributions. > > -- > Paulo Or ship the binary with it's dependencies all together as one package. -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0'; |
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | Am Sat, 10 Nov 2012 16:40:37 +0100 schrieb Jacob Carlborg <doob@me.com>: > What's the best way to achieve binary compatibility on Linux? For example, if I compile an application on, say Ubuntu 12.04, it will most likely not run on any older versions of Ubuntu but it will run on future versions. > > My current approach to solve this is to compile the application in the oldest version of Ubuntu I can find, in this case 6.x. This is starting to get a bit problematic: > > * The integration with VirtuaBox (I'm running Ubuntu as a guest) is > pretty bad > * DMD won't run of out of the box, I need to compile it. This is also > making DVM basically useless > * I can't clone the dlang repositories due to having a very old > version of git installed > * I can't compile git, I haven't investigated in why but probably due > to the system is too old > > Is there some compiler/linker flags I can use when building to make the executable compatibility with older versions of Linux? > > Or is there a better way to solve this? > crosstool-NG has a nice option "Oldest supported ABI" where you can enter an old GLIBC version and the compiler will generate executables compatible with this version (although it still uses a recent glibc). I have no idea how this works, but that's the best solution I have seen so far. (crosstool also has an option "Disable symbols versioning" which completely disables versioning. quite cool). Here are some links which might help: http://sourceware.org/ml/libc-help/2011-04/msg00032.html http://www.trevorpounds.com/blog/?tag=symbol-versioning |
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paulo Pinto | On 2012-11-10 18:39, Paulo Pinto wrote: > I guess the right answer is to have everything compiled statically, > especially if you need compatibility across distributions. I just read somewhere that compiling it statically will make it _less_ compatible than compiling it dynamically. http://stackoverflow.com/questions/8657908/deploying-yesod-to-heroku-cant-build-statically/8658468#8658468 -- /Jacob Carlborg |
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | Al 10/11/12 16:40, En/na Jacob Carlborg ha escrit: > What's the best way to achieve binary compatibility on Linux? For example, if I compile an application on, say Ubuntu 12.04, it will most likely not run on any older versions of Ubuntu but it will run on future versions. > > My current approach to solve this is to compile the application in the oldest version of Ubuntu I can find, in this case 6.x. This is starting to get a bit problematic: > > * The integration with VirtuaBox (I'm running Ubuntu as a guest) is pretty bad > * DMD won't run of out of the box, I need to compile it. This is also making DVM basically useless > * I can't clone the dlang repositories due to having a very old version of git installed > * I can't compile git, I haven't investigated in why but probably due to the system is too old > > Is there some compiler/linker flags I can use when building to make the executable compatibility with older versions of Linux? > > Or is there a better way to solve this? > Ubuntu 10.04.4 LTS is old enough? You can install/run dmd out of the box on it just installing the appropriate deb package. -- Jordi Sayol |
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johannes Pfau | On 2012-11-10 19:54, Johannes Pfau wrote: > crosstool-NG has a nice option "Oldest supported ABI" where you > can enter an old GLIBC version and the compiler will generate > executables compatible with this version (although it still uses a > recent glibc). I have no idea how this works, but that's the best > solution I have seen so far. (crosstool also has an option "Disable > symbols versioning" which completely disables versioning. quite cool). > > Here are some links which might help: > http://sourceware.org/ml/libc-help/2011-04/msg00032.html > http://www.trevorpounds.com/blog/?tag=symbol-versioning I got the last link from someone in the D IRC channel. I just don't know how to do that with D. -- /Jacob Carlborg |
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jordi Sayol | On 2012-11-10 19:49, Jordi Sayol wrote: > Ubuntu 10.04.4 LTS is old enough? I have no idea. I don't know how often people update their Linux systems and how compatible different distributions are. Sine I'm not using Linux as my primary platform I was hoping someone else could answer this. What is the oldest system I need to reasonably support? I'm mostly talking about tools and libraries for the D community here. -- /Jacob Carlborg |
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | On Sat, 10 Nov 2012 13:01:27 -0600, Jacob Carlborg <doob@me.com> wrote:
> On 2012-11-10 19:49, Jordi Sayol wrote:
>
>> Ubuntu 10.04.4 LTS is old enough?
>
> I have no idea. I don't know how often people update their Linux systems and how compatible different distributions are. Sine I'm not using Linux as my primary platform I was hoping someone else could answer this.
>
> What is the oldest system I need to reasonably support? I'm mostly talking about tools and libraries for the D community here.
>
Oldest system to reasonably support? I would say Debian Stable.
It is used on a lot of server systems and isn't *too* far behind/old.
If you need newer versions of packages, debian has its testing and experimental branches.
I don't remember if they still are, but Ubuntu used to take a snapshot of Debian Sid to base its packages on.
Linux Mint Debian gets its packages from debian testing I believe.
The point I'm making is that Debian is pretty much the upstream repo. You can go as far as to test versions that haven't made it into Ubuntu or Mint yet.
If people are using older versions than Debian Stable, then you should probably forget about them.
Either they will cherry-pick the versions they need, or they are not interested in anything new and untested.
Just my two cents as an ex server admin.
|
November 10, 2012 Re: Binary compatibility on Linux | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | I would say supporting distributions which are no longer supported by the distributions itself is of very little value. So for Ubuntu the last still supported LTS version should be old enough.
I think virtually nobody is using anything older, especially not 06.XX! And if they do, then they will have a whole bunch of other problems than not being able to use your program.
Best regards,
Robert
On Sat, 2012-11-10 at 20:01 +0100, Jacob Carlborg wrote:
> On 2012-11-10 19:49, Jordi Sayol wrote:
>
> > Ubuntu 10.04.4 LTS is old enough?
>
> I have no idea. I don't know how often people update their Linux systems and how compatible different distributions are. Sine I'm not using Linux as my primary platform I was hoping someone else could answer this.
>
> What is the oldest system I need to reasonably support? I'm mostly talking about tools and libraries for the D community here.
>
|
Copyright © 1999-2021 by the D Language Foundation