- What can I discuss here?
- Frequently asked questions
- What Linux distributions are there?
- What about non-Linux based operating systems?
- Which UNIX or UNIX-alike is best for me?
- What other web sites exist for UNIX or UNIX-alike communities or documentation?
- What program should I use for X or to do Y?
- How can I get my "winmodem" working?
- What libraries do I need for game development?
- What libraries do I need for GUI development?
- How do I develop with OpenGL?
- What functions are recommended for high precision time retrieval?
What can I discuss here?
Anything related to development or general usage of UNIX or UNIX-alike environments probably belongs here.
Frequently asked questions
What Linux distributions are there?
For a list that's as complete as they come, see DistroWatch.com. LWN also provides a relatively complete list of distributions. For IA-32 users, there's also the Which distro for you? automated chooser.
For a quick list of the big names:
- Debian: a community run, devoted to "Free" software, mostly GNU/Linux distribution (there is some "official" experimental support for using BSD kernels with a GNU userland as well). The origin of the "Deb" packaging format as well as the apt dependency manager.
- Fedora: the community run basis for Red Hat's commercial offerings, offering only "Free" software GNU/Linux distribution. Predictably, Fedora utilizes Red Hat's RPM packaging format.
- Gentoo: the most well known source based Linux distribution. The origin of portage, the BSD-ports inspired package building and installation system, among other things.
- Mandrake: a commercial GNU/Linux distribution largely aimed at providing a friendly desktop environment. Mandrake utilizes Red Hat's RPM packaging format.
- Red Hat: now a "completely" commercial GNU/Linux distribution. See Fedora for the "Red-Hat-sponsored and community-supported" basis of Red Hat. The origin of the RPM packaging format.
- Slackware: one of the oldest Linux distributions and still actively maintained and releasing new versions. Uses raw tarballs for packaging, meaning no real dependency tracking (although there is a new tool to handle dependencies for installation).
- SUSE: a commercial partly desktop oriented distribution that has, at least historically, shipped with non-Free software. SUSE utilizes Red Hat's RPM packaging format. SUSE is now owned by Novell.
If you're looking for a "live" distribution, one that can be run without touching your hard drive(s), normally by booting off of a CD, this list is more appropriate. The selection listed here are largely for "portable" distributions or introductory purposes but there are many different tasks a live distribution can fulfill: system repair disks (not only for repairing Linux or the OS the disk is running), running a cheap read-only server, or even "desktop-like" installers.
- FreeBSD LiveCD: A live version of FreeBSD.
- Knoppix: An easy-to-use live distribution normally packaged to use KDE. Knoppix is based on a mixture of Debian repositories and relying on Red Hat's Kudzu hardware detection software.
- Morphix: Based on Knoppix but designed to be more modular. The "stock" packages include options from lighter to heavier (GNOME or KDE) to only games.
- SUSE Live-Eval: A live version of SUSE.
What about non-Linux based operating systems?
There are a couple commonly used flavors of BSD:
- FreeBSD: Probably the BSD variant most used on desktop machines, but obviously not limited to desktop use.
- NetBSD: A BSD variant known for its ease of portability.
- OpenBSD: The BSD variant known for its dedication to security and its record of success in that field.
Mac OS X is a UNIX derivative as far as its userland goes. Mac OS X uses the Mach kernel. The open source portion of Mac OS X is maintained as the Darwin project.
Sun also has its own UNIX derivative Solaris.
Other companies have their own, often specialized UNIX derivatives. IBM's AIX, HP's HP-UX, et cetera. For a relatively complete history of UNIX see this page.
Which UNIX or UNIX-alike is best for me?
It really depends upon who's asking and what they plan on doing with the system. Consulting LWN's Which is the best distribution? article may be a good first step. Many of the choices you'll have don't cost anything, so with enough time you might want to sample a few to see what you like. I'm sure Google has some words on the matter to add as well. If you cannot find an answer yourself and you have specific needs, feel free to ask in the forum.
What other web sites exist for UNIX or UNIX-alike communities or documentation?
What program should I use for X or to do Y?
- 3D Modeler: Blender and Wings3D are two popular free options.
- C or C++ Compiler: GCC. Also, don't confuse the compiler with the IDE; keep reading for editors and IDES.
- Desktop Environment: the two big desktop environments are GNOME and KDE. In theory, Enlightenment could become an option if E17 is ever released. If you don't need something that "complete", see window managers below.
- Editor: Emacs (console or X, largely unique usage style), gedit (GNOME), Kate (KDE), Nano (console), VIM (console or X), XEmacs (X, a fork of Emacs from before it supported X).
- Font Editor: FontForge (formerly known as pfaedit).
- IDE: Anjuta (intended for C and C++), Eclipse (largely intended for Java, but usable for non-Java development as well), KDevelop (many types of development), MonoDevelop (.NET).
- Scripting: depending upon your needs, you might find BASH, Perl, PHP, Python, or Ruby most applicable.
- Window Manager: Afterstep (originally styled after NeXT Step), Blackbox (relatively minimalist, mostly dead), Enlightenment (eye candy), Fluxbox (based on Blackbox), FVWM (highly configurable but very light), IceWM (quick and simple, slightly Windows-ish), Metacity (GNOME's official window manager, not particularly meant to be used standalone), Openbox (based on Blackbox), Sawfish (relatively minimalist, extendable through Lisp-based language), Window Maker (NeXT Step inspired), Xfce (somewhat CDE-ish), XPde (intended to be a Windows clone).
How can I get my "winmodem" working?
Your first (and, likely, final) stop should be Linmodems.org.
What libraries do I need for game development?
Assuming you'd like to stay higher level than Xlib, ClanLib ("medium level development kit" handling "display, sound, input, networking, files, threading and such" for C++) and SDL (handles 2D graphics or 3D with OpenGL, input, sound, et cetera) are great aids. Both of those also allow for relatively easy portability to a wide variety of environments.
What libraries do I need for GUI development?
The two recommended choices are GTK+ and Qt. Which is a better choice depends on personal opinion and the details of what you need:
- GTK+ (version 2.x)
- License: LGPL.
- Language Bindings: C (the official interface), C++, Java, .NET, Perl, Python, et cetera.
- Platforms: DirectFB, Windows, X11 (many platforms).
- Qt (version 3.x)
- License: GPL and QPL.
- Language Bindings: C++ with MOC preprocessor (the official interface), Java, .NET, Perl, Python, et cetera.
- Platforms: DirectFB (in beta), Mac OS X, Windows (commercial license only), X11 (many platforms).
How do I develop with OpenGL?
- If you are using or developing for the X Window System (if you're unsure, the answer is yes):
Regardless of implementation, GLX is the library the connects OpenGL with the X Window System. If you're communicating with X at a relatively low level (e.g., through Xlib), this is what you'll want to use. Tutorials on using GLX and the necessary parts of Xlib can be found at NeHe Productions (at the bottom of most tutorials, there will be a "Linux/GLX" port). If you want to use something just a bit higher level and/or something portable, I'd recommend looking into SDL. As with GLX, SDL tutorials can be found at NeHe Productions (at the bottom of most tutorials, there will be a "Linux/SDL" port) or in the SDL Library Documentation.
In XFree86 and derivative servers, the default OpenGL implementation is based on Mesa. While Mesa by itself is (with certain exceptions) only a software rendering OpenGL implementation, the DRI project has implemented the needed hooks to allow potentially hardware acceleration through drivers in both Linux and FreeBSD. You do not normally need to install or upgrade Mesa or DRI since they're built into XFree86, upgrade your X server instead.
Certain drivers (notably, NVidia's proprietary video drivers) contain their own custom OpenGL implementation. If you're using such drivers, DRI and Mesa will not be used.
- If you are using or developing for DirectFB:
Check DirectFB's DirectFBGL extension page.
- If you are using GTK+ for any target windowing system:
See GtkGLExt. At some point in the future, GtkGLExt may become an official-but-seperate part of GTK+.
- If you are using Qt for any target windowing system:
See Trolltech's Qt with OpenGL documentation.
What functions are recommended for high precision time retrieval?
The "recommended" POSIX method is to use clock_gettime (which is provided in librt with glibc). If that's not available or portable enough, gettimeofday (originally from BSD 4.3, but added to POSIX) is also available. If neither of those are options, see ftime (POSIX).
Thanks to C-Junkie for prodding me into writing this FAQ (and some links), Oluseyi for something off of which to work (loosely :)), and clum for reminders of what to include. Oluseyi made note of Alastair Hogge's contribution of links as well.