Why are programs not distributed in compiled format

elfmakepackage-managementsoftware installationsource

But they give instructions like

cd downloaded_program
./configure
make install

This creates the ELF that is needed, and probably some .so files.

Why not put those inside a zip file for download, like with windows apps? Is there any reason why they need to be compiled by the user?

Best Answer

Let's analyse the factors...

Analysis:

DEPENDENCIES ACCORDING TO PLATFORM: There are some issues that arise in an environment where developers are creating and maintaining several architecture-specific variants of an application:

  • Different source code is required for different variants — Different UNIX-based operating systems may use different functions to implement the same task (for example, strchr(3) vs. index(3)). Likewise, it may be necessary to include different header files for different variants (for example, string.h vs. strings.h).

  • Different build procedures are required for different variants — The build procedures for different platforms vary. The differences might involve such particulars as compiler locations, compiler options, and libraries.

  • Builds for different variants must be kept separate — Since there is a single source tree, care must be taken to ensure that object modules and executables for one architecture do not become confused with those for other architectures. For example, the link editor must not try to create an IRIX–5 executable using an object module that was built for SunOS–4.

  • Every operating system has its own linking management scheme and must prepare the ELF (Executable and Linking Format) file as it needs it.

  • The compiler will generate a build that is a sequence of instructions, and distinct architectures mean different instruction sets (Comparison of Instruction Set Architectures). So, the output of the compiler is distinct for each architecture (Ex: x86, x86-64, ARM, ARM64, IBM Power ISA, PowerPC, Motorola's 6800, MOS T 6502, and so many others)

SECURITY:

  • If you download a binary, you can not be sure if it does what it says it does, but you can try to audit the source code and use a self compiled binary in your system. In spite of this, the user Techmag made a good point in his comment, auditing the code requires knowledgeable and competent coders to assess code and is not a safety guarantee.

MARKET: In this section there are a lot of factors, but i'll try to resume it:

  • Not every company aims to reach all the platforms, it depends on the market and the platforms popularity and what they want to sell.

  • Free software have the spirit of making software as widely available as possible, but it doesn't imply that the software is designed for every platform, it depends on the community who supports it.

Conclusion:

Not every software is designed for every platform. Providing binaries for all the architectures and platforms implies to compile it, test it, and maintain it for all the platforms. That's more work that is sometimes just too expensive, and can be avoided if the user compiles it in its own platform. Also, the user will be aware of what he's executing.

Related Question