Ask any independent software vendor what he hates most about developing for Linux and he'll tell you that it's having to develop for SUSE and for Red Hat and for Ubuntu and ... you get the idea. The Linux Foundation has just released a beta of a new program, Linux Application Checker (AppChecker), that's going to make ISVs and other programmers start to love developing for Linux.
AppChecker, now in beta 3, is a downloadable open source Linux program. Once installed, the program shows you a Web page, the LSB Database Navigator. Here, you click on the Application Check link. This presents you with a Web form interface to fill out. In this form, you'll enter a name for your report and Name field, and in the Components field you'll enter the file path for your application. Next, enter the application's individual files, directories, installed RPM packages (prepended with pkg:),; RPM and .deb package files, and tar.gz and tar.bz2 archives. To make this manageable, click on the Select Application Components button so you can enter each item in a separate field. Next, select the LSB Version and LSB Profile you want to test against.
You then let AppChecker rip. It will automatically decompress archives and start testing. The program will check out your ELF (Executable and Linking Format, a.k.a. binary files), Perl, Python, and shell scripts. So far, this doesn't sound much more than just another fancied-up version of the forerunner of all program checkers, lint, but it's what AppChecker does next that will make it a must for any Linux software developer.
AppChecker then checks your program not only against different versions of the Linux Standard Base (LSB), but also against all the Linux distributions in the LSB Database. After the test is done it will present you with a report. It's this report that makes AppChecker special.
In the Web-based report, you're shown the compatibility status of your application with the various distributions, and which external libraries and interfaces your program uses. If all goes well, it gives you the option of putting your program in for LSB certification straight from the test program. It doesn't just give you a thumbs-up or thumbs-down for your application on any particular distribution, according to Amanda McPherson, Linux Foundation vice president of marketing and developer programs -- it "gives you the details you need to get your program running on a particular distribution."
McPherson warns, "This is a beta program and there's no guarantee, but yes, if AppChecker says your program should work with, say, Ubuntu 7.10 and 8.04, then your application should work on these distributions. The results can get very granular. It will tell you this library or this interface isn't available in this distribution. It can also recommend some replacements. For example, OpenSSL is often a problem and you should use different SSL library."
The program's initial idea came from McPherson and Ted T'so, the Linux Foundation's CTO and noted Linux kernel developer. AppChecker was then put together by T'so and the Russian Academy of Science. The program is licensed under the GPLv2.
According to AppChecker's technical documentation, AppChecker works by analyzing your "program's C/C++ symbols -- mostly functions with some global variables -- and libraries required by an application that are satisfied by dynamically linked libraries provided by a distribution."
AppChecker isn't a debugger. It doesn't check that the "type information expected by the application matches the type of the object provided by the distribution's libraries. For example, the layout of a data structure might have changed, or the function parameter that had previously been a 32-bit integer may have been changed to a 64-bit integer. Another problem that cannot be detected by the AppChecker is if the details of a function's behavior changes from one version to another."
What it does do is spell out for you what libraries and interfaces are provided by any given distribution, and make suggestions on which ones you might use as replacements to work on a particular version of Linux, or that will work on several different Linux distributions, McPherson explains. With this tool, you can quickly see what you need to do with your application to make it more portable across different Linux distributions.
It isn't perfect, of course. Not only is the program still in beta, but some libraries and interfaces aren't in the LSB databases. Still, it's a huge step forward in enabling developers to see exactly what they're dealing with in writing an application for multiple different versions of Linux.
AppChecker users can keep their test results to themselves, but McPherson hopes that they'll share their results with the Linux Foundation. "If you choose choose to share your results with us, it helps the Linux platform and helps the LSB get better. For example, it tells us what libraries Linux developers are using that aren't in LSB. We can then include [them] in the LSB, and that will make the LSB better."