How many binaries do I need to get ‘reasonable’ Linux coverage

binarydistribution-choice

Sorry, completely opinion-based. Please let me know if I should be asking elsewhere.

I have written some free-of-charge engineering software (command line, no graphics) which has to be distributed as a binary. Question: how many different binaries do you think I should generate to get a 'reasonable' user coverage? My guess is that about 70% of the potential users are in a professional environment, and over half of them are probably running a derivative of RHEL6 or RHEL7. Some might be running openSUSE, but I'm not aware of people using Debian.

The other 30% are probably students/amateurs/etc, and a lot of them are probably running Ubuntu or similar. I have a day job and really can't put too much time into this, so I'm not interested in getting 100% coverage, or supporting non-x86_64 architectures, or downloading lots of distributions for compilation and testing, or supporting people who have downloaded a distro just because it's the latest and greatest.

The code is written on Centos-6, and I generate dynamic and static binaries for testing (and msys64 binaries for Windows). An obvious option is to do an LSB version, but I'm not sure that this actually buys me anything, or would be better than just installing Ubuntu and releasing a Ubuntu version.

Any thoughts?

edit – more info:

The (C++) code has no difficult external dependencies – ldd reports

linux-vdso.so.1 =>  (0x00007ffd197cf000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039cb400000)
libm.so.6 => /lib64/libm.so.6 (0x0000003e63e00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039cac00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003e63200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003e62e00000)

The static version is linked with -static -static-libgcc. file reports that it's linked for GNU/Linux 2.6.18, which I guess might be a problem. The code uses flex, bison, and Antlr, and Bison versioning is the only real problem when porting to new systems, but I now just keep the C++ output to get around that.

I think I probably have to run the static version on a number of systems to see how robust it is.

Best Answer

If the question is “How many Gnu/Linux distros do I need to target, to get 90% user coverage?”, then

Compile and link with static libraries: to need to target the distro. OR link to libraries that are installed in the same directory.

Target the x86 (maybe 32 bit and 64bit, I don't know how many 64bit distros don't have 32bit user land support), maybe also target the ARM from the raspberry pi, maybe sparc, maybe alpha, mips (you will have to do a survey to find out how many of your potential users use these.

Related Question