Difference between revisions of "Unix"

From RogueBasin
Jump to navigation Jump to search
m (→‎Diversity of interfaces: Remove redundant redundant word.)
(Claims about early roguelikes using curses functions might be incorrect; to this day, NetHack continues to use only termcap functions. Reorder the article while shifting focus to Rogue.)
Line 1: Line 1:
'''Unix''' is a family of operating systems conforming to the ''Single Unix Specification'', ultimately based on the original AT&T Unix. Unix clones such as [[BSD]] and [[Linux]] follow most of the specification. Unix is a [http://www.unix.org/trademark.html trademark of The Open Group]; most Unix clones are [http://www.netbsd.org/Misc/call-it-a-duck.html not Unix].
'''Unix''' is a family of operating systems conforming to the ''Single Unix Specification'', ultimately based on the original AT&T Unix. Unix clones such as [[BSD]] and [[Linux]] follow most of the specification. Unix is a [http://www.unix.org/trademark.html trademark of The Open Group]; most Unix clones are [http://www.netbsd.org/Misc/call-it-a-duck.html not Unix].
Unix is the origin of the [[C]] programming language, the [[curses library]] and the roguelike genre of games. The original ''[[Rogue]]'' rose to fame as a binary distributed with the [[BSD]] variant of Unix.


<div class="floatright">__TOC__</div>
<div class="floatright">__TOC__</div>
== Origin of the roguelike genre ==
== Porting a roguelike to Unix ==
Unix is the origin of the [[C]] programming language, the [[curses library]] and the roguelike genre of games. ''[[Rogue]]'' is a Unix program in C and curses; so are ''[[Hack]]'' and ''[[Larn]]'' and ''[[Umoria]]''. Today, both ''[[Angband]]'' and ''[[NetHack]]'' have Unix and curses as one of the supported platforms.
If your roguelike game is a C program, then to port it to Unix, you ''must'' provide the source code to the public. This is necessary to allow everyone to recompile the roguelike game for their Unix system and their processor architecture.


Today, the Unix clones called [http://www.freebsd.org FreeBSD], [http://www.netbsd.org NetBSD], [http://www.openbsd.org OpenBSD], [http://www.minix3.org Minix], [http://www.opensolaris.org OpenSolaris] and [http://www.gnu.org GNU/Linux] are freely available. Many players and developers use them.
Today, the Unix clones called [http://www.freebsd.org FreeBSD], [http://www.netbsd.org NetBSD], [http://www.openbsd.org OpenBSD], [http://www.minix3.org Minix], [http://www.opensolaris.org OpenSolaris] and [http://www.gnu.org GNU/Linux] are freely available. Many players and developers use them.


== Source-compatible ==
Some roguelike developers only distribute a Linux/i386 binary. "Linux/i386" refers to the Intel x86 or IA-32 architecture found in common personal computers. However, some players have Linux on other types of computers, such as [http://www.penguinppc.org/ Linux/powerpc]. Some players have Unix flavors other than Linux, such as the *BSD systems. '''There is no single Unix binary format.''' A Linux/powerpc computer cannot a play a Linux/i386 game. An OpenBSD/powerpc computer cannot play a Linux/powerpc game.
The source code of a C and curses program made for Linux should compile above FreeBSD, and vice versa, with at most minor changes.


In the 1980s, the many BSD and SYSV variants introduced incompatibilities to Unix, but the ''Single Unix Specification'' has brought more uniformity to things. Most functions that a roguelike programmer needs should be everywhere. For example, you can use the <tt>random</tt> function to generate random numbers, and <tt>srandom</tt> and <tt>time</tt> to seed the random number generator; you would include stdlib.h and time.h. '''A roguelike developer can program for one flavor of Unix and not worry about the others.'''
There are inconvenient workarounds, such as emulation, but confining players to Linux/i386 will lock out many potential Unix players.


The main difference is that Linux and Darwin users will link with <tt>-lncurses</tt> while most other Unix users will link with <tt>-lcurses</tt>. Obviously this is irrelevant if the program does not use curses.
== Source-compatility ==
In the 1980s, the many BSD and SYSV variants introduced incompatibilities to Unix. Today, ''Single Unix Specification'' has brought more uniformity to things. Most C functions that a roguelike programmer needs should be everywhere.


The worst portability problems happen if you need to create a pseudo-terminal (as sshd and xterm do) or networking interface. Roguelike games can avoid this mess.
For example, C programmers on both Unix and not-Unix platforms may use the <tt>rand</tt> function to generate random numbers, and <tt>srand</tt> and <tt>time</tt> to seed the random number generator; you would #include <stdlib.h> and #include <time.h>. Because <tt>rand</tt> is a bad generator on many systems, you may prefer to use the <tt>random</tt> and <tt>initstate</tt> generator on Unix. (Integration and use of the [[Mersenne twister]] may the key to giving reliable random numbers to a roguelike game on any operating system.)


== Not binary-compatible ==
Avoid non-portable Unix functions, such as <tt>random_r</tt> or <tt>arc4random</tt>, <tt>mempcpy</tt> or <tt>strlcpy</tt>, unless you are prepared to write configure tests for these functions and to provide substitutes should they be missing. The [http://www.gnu.org/software/libc/manual/ GNU C Library Manual] ("info libc" on a GNU system) describes quite well which functions are portable. If you are reading the BSD or Solaris manual pages, then functions attributed to "ANSI C", "XPG4", "POSIX", or the "Single Unix Specification" are portable. Some functions from "4.4BSD", including <tt>snprintf</tt>, are now portable.
'''There is no single Unix binary format. If you want Unix users to play your roguelike game, then you should provide source code.'''


OpenSolaris and Minix users cannot run Linux binaries. Most Linux binaries are usually Linux/x86 binaries, so Linux users with Alpha, PowerPC Macintosh, or Sparc hardware cannot run them either.
The worst portability problems will happen if you need to create a pseudo-terminal (as sshd and xterm do), create a networking interface, or support old Unix systems. A roguelike game will rarely come close to doing anything of that sort. In general, '''a roguelike developer can program for one flavor of Unix and not worry about the others.'''


: Some NetBSD/x86 users can load Linux/x86 binaries through ''binary emulation''. This requires some setup, including the installation of many GNU/Linux packages on the NetBSD system. Users of NetBSD's [http://www.netbsd.org/Ports/#ports-by-cpu 16 other architectures] cannot do this.
If you need to draw ASCII graphics on the terminal, then use the [[curses library]]! Programming with curses is very consistent across platforms; the main difference is that Linux and Darwin users will link with <tt>-lncurses</tt> while most other Unix users will link with <tt>-lcurses</tt>.


== Diversity of interfaces ==
== Diversity of interfaces ==

Revision as of 03:22, 29 May 2007

Unix is a family of operating systems conforming to the Single Unix Specification, ultimately based on the original AT&T Unix. Unix clones such as BSD and Linux follow most of the specification. Unix is a trademark of The Open Group; most Unix clones are not Unix.

Unix is the origin of the C programming language, the curses library and the roguelike genre of games. The original Rogue rose to fame as a binary distributed with the BSD variant of Unix.

Porting a roguelike to Unix

If your roguelike game is a C program, then to port it to Unix, you must provide the source code to the public. This is necessary to allow everyone to recompile the roguelike game for their Unix system and their processor architecture.

Today, the Unix clones called FreeBSD, NetBSD, OpenBSD, Minix, OpenSolaris and GNU/Linux are freely available. Many players and developers use them.

Some roguelike developers only distribute a Linux/i386 binary. "Linux/i386" refers to the Intel x86 or IA-32 architecture found in common personal computers. However, some players have Linux on other types of computers, such as Linux/powerpc. Some players have Unix flavors other than Linux, such as the *BSD systems. There is no single Unix binary format. A Linux/powerpc computer cannot a play a Linux/i386 game. An OpenBSD/powerpc computer cannot play a Linux/powerpc game.

There are inconvenient workarounds, such as emulation, but confining players to Linux/i386 will lock out many potential Unix players.

Source-compatility

In the 1980s, the many BSD and SYSV variants introduced incompatibilities to Unix. Today, Single Unix Specification has brought more uniformity to things. Most C functions that a roguelike programmer needs should be everywhere.

For example, C programmers on both Unix and not-Unix platforms may use the rand function to generate random numbers, and srand and time to seed the random number generator; you would #include <stdlib.h> and #include <time.h>. Because rand is a bad generator on many systems, you may prefer to use the random and initstate generator on Unix. (Integration and use of the Mersenne twister may the key to giving reliable random numbers to a roguelike game on any operating system.)

Avoid non-portable Unix functions, such as random_r or arc4random, mempcpy or strlcpy, unless you are prepared to write configure tests for these functions and to provide substitutes should they be missing. The GNU C Library Manual ("info libc" on a GNU system) describes quite well which functions are portable. If you are reading the BSD or Solaris manual pages, then functions attributed to "ANSI C", "XPG4", "POSIX", or the "Single Unix Specification" are portable. Some functions from "4.4BSD", including snprintf, are now portable.

The worst portability problems will happen if you need to create a pseudo-terminal (as sshd and xterm do), create a networking interface, or support old Unix systems. A roguelike game will rarely come close to doing anything of that sort. In general, a roguelike developer can program for one flavor of Unix and not worry about the others.

If you need to draw ASCII graphics on the terminal, then use the curses library! Programming with curses is very consistent across platforms; the main difference is that Linux and Darwin users will link with -lncurses while most other Unix users will link with -lcurses.

Diversity of interfaces

Unix has a diverse set of libraries and environments to program in. Angband, NetHack, and their variants take the most advantage of this, providing multiple frontends or window ports.

The graphical environment on most Unix systems is the X Window System, Version 11. The main-x11.c frontend for Angband draws the game using X11, enabling new features like tiles and multiple windows. The x11 window port of NetHack provides similar features, but requires the Xaw widget set bundled with XFree86 or Xorg.

Qt and SDL interfaces to both Angband and NetHack also exist. Both Qt an SDL are portable across X11, Mac OS, and Microsoft Windows! Qt and SDL also add features that plain ancient X11 lacks.