Open Source Interview Questions
1. What are Gnome and KDE, and are they compatible?
Gnome and KDE are two large desktop environments. Both sit on top of the X server on Linux and work with a window manager and framework services. The framework service provides everything from color and font preferences to communication between other application services running on that desktop. Although Gnome applications can run in KDE with the installation of the kde core libraries and vice-versa. The two are compatible on an X level primarily. Gnome uses GTK+ for its GUI presentation while KDE uses Qt. Ironically Novell owns both technologies yet has not published a roadmap or any clue if full interoperability is on the cards.
2. What open source mechanisms exist to get software updates?
Several mechanisms exist today. For delivery of rpm based packages you can use yum or red carpet. For debian packages apt-get, for gentoo, ermerge and for Fire fox there is an xpi installer. Some users will only use source in which a cvs update is all that is required.
3. What are svn, bit keeper and cvs. If you have used any of these tools what enhancements would you like to see if any?
svn, bitkeeper and cvs are commonly used revision control systems in the open source community. For all the advantages that these tools bring, like networked based code commits and ease of editing there are a number of features that the professional complementary tools provide. One such feature is a change set, the ability to edit a group of files in your own working copy and manage that list of changes locally. Merges and conflicts also vary between tools and how revisions to a file are tracked can also have an impact on tracking deltas in source code. If you are happy with the tools as is then that is a good answer too.
4. What is the latest version of the Linux kernel, and what are the main improvements? A3.
The latest stable version of the linux kernel is 2.6. Most of the main distributions support this version, the odd-number based kernel releases used to represent a kernel in development mode. The latest update version of the kernel is now at revision 2.6.17. Although developers would be normally looking for a 2.7 kernel to appear for development work the 2.6 kernel is still where most of the new development is being carried out.
5. You’ve deployed your open source application, and it stopped working. What tools can you use to debug open source software?
Most of the popular open source projects use a logging infrastructure to log to a application log file or to the system log files. First look for any unusual messages there before bumping the log level up if you can. Use platform specific tools if possible, like the debug interfaces in net beans and eclipse can generate very verbose Java stack traces allowing you to pinpoint a line of code. If not you may have to resort to the gnu command line debugger gdb. If the application has already crashed, or you have run the command gcore on a running process you will be able to point gdb at that core file. gdb will be able to show you the stack trace of the last running thread and often the crash will be the result of accessing an invalid memory address like 0 (or null). For kernel level issues there is a kernel debug tool called kdb although unless you are working on the kernel most companies wouldn’t necessarily expect that level of experience.
6. What open source components have you used?
Although this should be an easy question, don’t get caught trying to guess a version of Linux or Apache. The current corporate versions of Linux used are Redhat Enterprise Linux 4.0 and SUSE Linux Enterprise Server 10. Knowledge of the personal editions of those distributions, like SUSE (10.1) or Fedora Core 5 or earlier should be more than sufficient. The enterprise editions primarily have kernels tuned for large scale systems and additional services such as clustering deployment and networking booting. If you used Redhat Enterprise edition don’t forget they only shipped RHAS 2.1, (before the enterprise name was used) RHEL 3 and now 4. For the other popular open source components, the latest stable version of Apache is 2.0.59. JBoss is at 4.0.4 and MySQL is at 5.0.24. Many corporate employees will probably be at least one version behind the latest developer release so describing how the latest version works or doesn’t work with earlier versions may earn you extra credits.
7. You’ve been asked to shortlist two open source components for your companies application. How can you tell the difference between a stable relatively bug free project and a new risky alternative?
Apart from obviously downloading each and trying them out and seeing how long each takes to configure there are other clues about how active and stable each project is. Some examples would be to look at the project status on sourceforge.net or the home site for the project. Check the forum and bug postings if they have them, are bugs being fixed, forum questions being answered? Next look for the rate of change, you may not be able to keep up with a project with a rapid rate of change and need to debug why your application stopped working when you got the latest snapshot. Finally, do they release milestone or snapshot binaries, if not consider the project under constant or stopped development.
8. What web service based technologies are available for open source developers?
The original web service technology, XML over RPC is used by many open source applications; most web service support comes in the form of language specific binding tools such as SOAP for PHP, JAX-RPC or Axis for Java, SOAPpy for Python. However several services do expose the REST service method which uses regular get and post http calls and is often easier and quicker to use.
9. What are the risks and trade-offs between using static versus dynamic libraries with open source software?
Dynamic and static libraries are primarily used for C and C++ based applications and designed to provide different levels of compile and runtime binding. Building with a static library means that your application included all the relevant code from the open source project you were using. This should mean that your application should run fine our of the box, however the downside is that you may forever be linked to a bug in the library code you used so that if a fix is needed in that library you need to rebuild your application too. Static linking is also treated differently that dynamic linking by some licenses. The upside to dynamic linking is that by separating the application to call the library code at runtime your own application is going to be smaller, you will also benefit from bug fixes made in that library. The downside is that the application binary interface (ABI) may change which means in rare cases you will have to release a new version of your product anyway.
10. You’ve been asked to bundle MySQL in your companies new product. The license of the final product has yet to be decided but you read somewhere that MySQL is GPL. What would you do next?
If this is for a commercial vendor and you don’t know your companies licensing model you should defer this question to your internal legal representative or equivalent. There are many conditions applying to software like MySQL that is dual licensed and what is allowable on your own open source project may require a different license for your own company.