Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Binary Compatibility #2

Open
mottosso opened this issue Dec 29, 2014 · 3 comments
Open

Binary Compatibility #2

mottosso opened this issue Dec 29, 2014 · 3 comments

Comments

@mottosso
Copy link
Member

One of the issues about compiled software is its dependency on the platform in which is was compiled. E.g. software compiled on Windows will only work on Windows, and the same goes for Linux and OSX.

To make matters worse, different versions/distributions of a particular platform also introduces incompatibilities - most notably the numerous Linux distributions.

Looks like there's generally two methods to bundle software on every platform.

  1. Big package, small dependencies
  2. Small package, large dependencies

Each has their own pros and cons. On Windows, the option is typically to bundle all dependencies, so as to make each installation isolated from each other. The end result is independent software and easy installation/uninstallation that typically takes up more space.

On Linux (and OSX?) however, the opposite seems true - i.e. to only bundle the bare essentials and rely on external dependencies for normal functioning, with one argument being that you are able to update primarily security-related libraries without re-compiling the entire package. Such as when a flaw is found in SSL, only SSL can be updated and the software can remain the same whilst taking advantage of the updated library.

When security is of no concern, is minimal bundling merely an optimisation?

References

@instinct-vfx
Copy link

There are some more things to keep in mind for windows. It is not only the architecture, but also the toolchain and redistributable version that is needed. So for example if you compile libraries with Visual Studio 2010, then you need to compile applications using them with VS2010 too. Now this can lead to quite some funky dependency hell. For example if you are compiling nuke plugins you have to use the VS version matching the nuke version you are targeting. So depending on the nuke version you need to use a different toolchain.
Now add funky stuff like python c extensions. Typically all binary distributions are compiled against the official binaries. If you need a different combination (which you do for both nuke, maya and max python distributions, as these distributions match their HOST applications toolchain) you have to recompile a LOT hehe.

Cheers,
Thorsten

@mottosso
Copy link
Member Author

Good points!

@mottosso
Copy link
Member Author

@instinct-vfx Does this only apply to Windows? What about Python extensions compiled with gcc version X running in Maya's Python compiled with version Y?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants