What is the difference between getty and agetty?

There was a program named getty in 1st Edition Unix. The BSDs usually have a program named getty that is a (fairly) direct descendant of this. It (nowadays) reads /etc/ttys for the database of configured terminal devices and /etc/gettytab for the database of terminal line types (a line type being passed as an argument to the getty program).

The Linux world has a collection of clones and reimplementations, as did minix before it.

  • agetty was written by Wietse Venema, as an "alternative" to AT&T System 5 and SunOS getty, and ported to Linux by Peter Orbaek (who also provided simpleinit alongside it). It is suitable for use with serial devices, with either modems or directly connected terminals, as well as with virtual terminal devices.
  • Paul Sutcliffe, Jr's getty and uugetty is hard to find nowadays, but was an alternative to agetty. (The getty-ps package containing them both can still be found in SlackWare.)
  • Fred van Kempen wrote an "improved" getty and init for minix in 1990.
  • Gert Doering's mgetty is another getty that is suitable for use with actual serial devices, and was designed to support "smart" modems such as fax-modems and voice-modems, not just "dumb" terminal-only modems.
  • Florian La Roche's mingetty was designed not to support serial devices, and generic getty functionality on any kind of terminal device. Rather, it is specific to virtual terminal devices and cuts out all of the traditional getty hooplah that is associated with modems and serial devices.
  • Felix von Leitner's fgetty was derived from mingetty, adjusted to use a C library with a smaller footprint than the GNU C library, and tweaked to include things like the checkpasswd mechanism.
  • Nikola Vladov's ngetty was a rearchitecture of the whole getty mechanism. Instead of init (directly or indirectly) knowing about the TTYs database and spawning multiple instances of getty, each to respond on one terminal, init spawns one ngetty process that monitors all of the terminals.