news.software.nn
The nn newsreader ("No News is good news").
nn was one of the great screen-oriented Unix newsreaders — famous for its motto and for reading efficiency that let its users survive high-volume groups. This group carried configuration help, kill-file craft and release discussion.
Newsreader-choice threads (nn vs. rn vs. trn vs. tin) are a genre of their own in its archive.
On this page
- A group named after a program
- The paperwork the group does not have
- Four newgroups and four rmgroups
- November 2001: the group is declared bogus
- Where nn sat among its siblings
- The author, Herlev, and the Danish connection
- The release history, and four maintainers
- The licence, and what it allowed
- The design argument: selection before reading
- What the menu actually did
- The other model: rn, and doing the right thing
- tin, slrn, Gnus, and a caution about lineage
- The newsreader-choice argument as a form
- Kill files
- Scoring, and filtering that outgrew the reader
- The volume problem
- What became of nn
- What the record does not show
- Scope and limits
A group named after a program
The Internet Systems Consortium distributes a newsgroups file from which any server can build its own group table, and a matching active file listing what a server should carry. Twenty-six groups stand under news.* in the current copy. Five of them are about news software, and four of those five are named for a category or a protocol rather than for a particular program: news.software.b for B-news-compatible transport software, news.software.nntp for the Network News Transfer Protocol, news.software.readers for newsreading software in general, news.software.misc for everything else. The fifth is named after one application.
news.software.nn — Discussion about the “nn” Usenet news reader package.
That is the whole of the group's official description, and it is still there. The active file gives the group a low and a high article number of zero and one and the flag y, the marker for an unmoderated group that accepts posting. Nothing in either file records when the group was made, who proposed it, or how the vote went; the files describe a namespace, not a history. The hierarchy that contains it, the machinery that creates and removes groups in it, and the control message that carries the decision are the subject of the news.* hub page and are not retold here. What this page owns is nn.
The oddity is a narrow one, and worth stating exactly, because the broad version of it is not true. Plenty of Big-8 groups are named after one piece of software: comp.text.tex, comp.databases.ingres and comp.lang.perl.announce are all in the current file. What is unusual about news.software.nn is that it sits in the branch Usenet reserved for talking about its own machinery, where the naming convention is otherwise categorical, and that it is the only newsreader in the world with a Big-8 address of its own. Two other groups in the branch once carried a program's name — news.software.notes, whose newgroup message described it as being for “Notesfile software from the Univ. of Illinois”, and news.software.anu-news, listed as “VMS Usenet software from Australian National Univ.” — and both were removed, in 1995 and 2007 respectively. The one still standing belongs to a program written by one man in Denmark, first released in 1984, and last patched in the month this page was written.
The paperwork the group does not have
For a Big-8 group the natural first place to look is the archive of news.announce.newgroups that the Internet Systems Consortium mirrors: for most groups it holds the Request for Discussion, the Call for Votes, the result with every voter listed, and any later notice. The archive's news/ directory is well stocked. It has files for news.software.anu-news, news.software.inn, news.software.misc and news.software.nntp; it has the whole 1995 reorganisation proposal under news.software-reorg; it has the two news.admin reorganisations, the news.answers expansion, and some thirty other proposals besides.
It has nothing for news.software.nn. There is no RFD, no CFV, no result, no later notice. That is not in itself a sign of irregularity; it is more likely a sign of age. The archive is thin for the years before the early 1990s, and this group was created before the period it covers reliably.
The evidence of the vote survives instead in the software's own documentation, which is a better source than most archives because it was written by the person who wanted the group. The README shipped with nn release 6.4 in 1990 states the matter in two sentences, in a section of its own headed NN HAS ITS OWN NEWS GROUP:
The news.software.nn group was created in January 1990 after an official vote. It may still be missing on parts of the net, so if you don't get it please check your news feed, and help propagating the news group to the entire net.
The same README's acknowledgements thank “Lloyd W. Taylor for his efforts counting the votes for news.software.nn”. So the group was made by the ordinary procedure of its day — a proposal, a discussion, a call for votes, a neutral votetaker, a tally — in January 1990, and the man who counted the ballots is named. What the record does not preserve is the tally itself: how many voted, how many against, or what the charter said in its own words before it was compressed into the one line the newsgroups file still carries. Any figure offered for that vote would be invention, and none is offered here.
The last line of the quotation is a reminder of how group creation actually worked. A successful vote produced a request, not an event. Every administrator decided separately whether to honour it, and for months afterwards the author of nn was asking his own users to go and lean on their news administrators — which is what “help propagating the news group” means. A group existed, in practice, wherever enough people had asked for it by hand.
Four newgroups and four rmgroups
The other administrative archive at the Internet Systems Consortium keeps the newgroup, rmgroup and checkgroups control messages seen on Usenet since early 1991. The file for news.software.nn is short: eight messages in total, four newgroup and four rmgroup, spanning ten and a half years. The archive's own policy document notes that about a month of messages from around August 1992 are missing, so eight is a floor rather than a certainty.
The earliest is dated 23 May 1991 and was issued by the news account at Compass, Inc. of Wakefield, Massachusetts. It is not the group's creation — that had happened sixteen months earlier — but part of a bulk re-issue of the kind an administrator sent when whole stretches of a neighbour's group list had gone missing. The same account stamped out a newgroup for comp.sources.unix at 16:29 that afternoon and for news.software.notes eleven seconds after the one for nn. Its one-line body is the group description in an earlier form:
Discussion about the “nn” news reader package.
The word Usenet was added to that sentence at some later point, and the amended version is what the canonical newsgroups file carries today. Nothing in the archive records who added it. It is a small illustration of how the group descriptions actually evolved: not by amendment of a charter but by a copy of a copy, propagating.
The three other newgroup messages are all local housekeeping rather than announcements to the network. On 7 June 1991 one came from Alcatel Bell Telephone in Antwerp, with an empty body. On 26 April 1992 one came from the Department of Computer Science at the University of Maine, carrying a Distribution header of umcs — that is, a message deliberately confined to one site's own machines. On 9 November 1994 one came from the news account at utmb.edu, its body a single stray character. Between them they describe an ordinary fact of the period: a group that had existed since 1990 kept having to be introduced to servers that had never heard of it.
November 2001: the group is declared bogus
The four rmgroup messages all fall inside four days. Three are dated 1 and 2 November 2001 and carry the From line usenet hierarchy administration at a Canadian consultancy's address; the fourth, dated 4 November, carries the name and address of the maintainer of the rival newsreader tin. All four demand the group's deletion. The three longer ones say the same thing verbatim, complete with the same misspelling:
control cmsg to counter numerous forged newgroup commands, and remove bogus newsgroup: news.software.nn which was never created in accordance to the accepted rules and methods for this hierachy.
Each adds that the sender will repeat the message at reasonable intervals, and that the forger responsible has managed “over 100 forgeries so far”. Read alone, the file looks like a hierarchy administrator patiently cleaning up after a vandal, and the group being cleaned up looks illegitimate.
Read next to its neighbour, it looks like nothing of the sort. The control archive for news.software.readers records the identical wave: three messages in the same name timed at 23:54, 00:17 and 00:43, ten to twenty seconds apart from the three aimed at nn, and a fourth in the tin maintainer's name a day later — all declaring news.software.readers bogus too. news.software.readers was created by David C. Lawrence, whose name is on the Approved header of the period's news.announce.newgroups postings, and whose newgroup message of 24 June 1991 sits at the top of the same file and states that the group “passed its vote for creation by 174:21 as reported in news.announce.newgroups on 17 Jun 1991”. Whatever else it was, it was not a group that had never been voted on.
Two further details point the same way. Each of the messages ends with a signature line of ungrammatical nonsense — the output of the sentence-generating forgery software that was flooding Usenet in exactly those weeks — and no two are alike. And the outcome speaks for itself: both groups are in the canonical newsgroups file a quarter of a century later. The honest summary is that in early November 2001 a forgery flood attacked the news.software.* groups from both directions at once, issuing bogus newgroups in volume and then bogus rmgroups in the names of real administrators to counter them, and that the surviving archive faithfully preserves both halves of the mess. The wider history of forged control messages, cancels and the conventions built to contain them belongs to the alt.* page, which owns it.
Where nn sat among its siblings
The clearest surviving snapshot of the branch comes from a proposal that left this group alone. The renaming proposal Jonathan Grobe brought forward in the autumn of 1995 — set out on the news.* hierarchy page, which owns that episode — is useful here for what it did NOT propose. His summary sets the branch out in two columns, current against proposed. Three rows are identical on both sides — news.software.anu-news, news.software.nn and news.software.readers — and the two he wanted renamed are the two named for a protocol and for a transport lineage. The rationale is explicit that the problem was names that had stopped describing contents: it was not obvious, Grobe wrote, that news.software.nntp was where INN was discussed, or that C News belonged in news.software.b. Nobody had that difficulty with a group named after the program it was about.
That posting also carries the single best measure of the group's size that survives anywhere. Usenet articles include an Xref header listing the local article number the posting received in each group it was crossposted to, and Grobe crossposted his RFD to eight groups at once. On the UUNET server on 1 November 1995 the numbers stood as follows.
- news.groups — 172,241
- news.admin.misc — 46,563
- news.software.readers — 25,312
- news.software.nntp — 21,050
- news.software.b — 19,164
- news.software.nn — 8,723
- news.software.anu-news — 8,620
- news.announce.newgroups — 7,791
These are server-local counters, not article totals: they count everything that machine had numbered in that group since it started keeping the sequence, which is not the same as everything ever posted, and a different server would give different figures. Taken for what they are, they place news.software.nn firmly in the second rank of the branch — about a third of the general newsreader group, two-fifths of the protocol group, and almost exactly level with the group for a VMS news package. It was a real working group with a decade of traffic behind it, and it was not a crowd.
The relationship with news.software.readers is worth stating precisely, because it runs the opposite way to what one would guess. The group for one newsreader is the elder by eighteen months. When the general group was created in June 1991, its charter — quoted in full inside Lawrence's newgroup message — listed rn and its variants, tass, xrn and gnus as topics, and then explicitly deferred elsewhere:
Technical issues about nn, notes, anu-news, and PSU NetNews will probably find more answers in their respective newsgroups, but they are not excluded from discussion here.
Of those four “respective newsgroups”, one remains. news.software.notes was removed on 10 April 1995, superseded by news.admin.misc, on a removal vote that passed 428:53 as reported in news.announce.newgroups six days earlier. news.software.anu-news lasted longer and went more formally: a Last Call for Comments on 23 March 2007 drew no comments at all, the Big-8 Management Board posted its decision to remove on 29 March, and the rmgroup control message went out on 3 May. The proposal's rationale is one sentence and it is the reason any group ever gets removed — the group “has not had any on-topic messages since November 2005, at which point there was a two-article thread”. No comparable proposal against news.software.nn appears anywhere in the archive. It is in the current newsgroups file, in the current active file, and unmoderated.
The author, Herlev, and the Danish connection
nn's manual has named its author in the same eight words since 1990: Kim F. Storm, Texas Instruments A/S, Denmark. Only the heading above the line has changed, from AUTHOR in the 1990 manual to ORIGINAL AUTHOR in the current one, now that somebody else maintains the program. The 1990 README is more specific still, signing off with a postal address at Marielundvej in Herlev — a suburb about eleven kilometres north-west of the centre of Copenhagen — a telephone number, a fax number and the address [email protected]. The program was not a university project and not a company product; it was written by an engineer at the Danish arm of an American semiconductor firm, and distributed from there.
The distribution channel was Danish too. Release 6.4's README gives the anonymous FTP host as dkuug.dk, with an IP address printed beside it, and directs bug reports to [email protected]. DKUUG is the Danish UNIX systems User Group, founded in 1983; it was the first Internet provider in Denmark, and it created and maintained the .dk domain. Its founder, Keld Simonsen, came from the Datalogisk Institut at the University of Copenhagen — which matters in a moment. When nn was still an application with an audience rather than a piece of history, its bug mailbox and its source archive sat on a user group's machine in Copenhagen.
One substantial component came from that same institute across the city. The manual credits it separately, in wording unchanged from 1990 to 2026: “The NNTP support was designed and implemented by Rene Seindal, Institute of Datalogy, University of Copenhagen, Denmark.” This matters more than a credit line usually does. nn was built for a machine with the news spool on its own disks; NNTP support is what let it survive the shift to a world where the articles lived on somebody else's server, and by the time this directory's gateway was running that was the only way most people read news at all.
The acknowledgements in the 1990 README also record a piece of cross-pollination that the newsreader wars tend to obscure. Storm's warm thanks in that section go to four people: Rene Seindal and Wayne Davison “for their many contributions”, Lloyd W. Taylor for counting the votes, and Paul D. Anderson for running the release 6.3 patch server. Davison was the author of trn, the threaded rn that is usually cast as nn's great rival. The two programs argued about the right way to read news; their authors sent each other patches.
One further note. GNU Emacs contains a file, cua-base.el, implementing what Emacs calls CUA mode, whose author line reads Kim F. Storm <[email protected]> and whose copyright begins in 1997. That is the same domain nn's own project site uses when it links the words “Kim F. Storm” from the sentence naming nn's original author. The connection is therefore made by nn's own maintainer rather than inferred here, which is about as good as this kind of identification gets short of asking; nothing on this page depends on it either way.
The release history, and four maintainers
nn's own source tree carries a file, patchlevel.h, whose comment block is a dated release history maintained continuously since 1988. It is the single most useful document about the program, because it is primary, unbroken, and still being appended to; its two copyright lines, Storm's for 1990 and Pins's for 1996 to 2026, are the whole custody chain in two lines. Its opening entries anchor the dates that the project's website summarises as “its first release in Denmark in 1984 (!), in Europe in 1988, and the global release in June 1989”:
- 20 July 1988 — release 6.0 beta, marked Denmark
- 1 November 1988 — release 6.1, marked Europe
- 21 March 1989 — release 6.2 beta, by FTP
- 30 May 1989 — release 6.3, marked comp.sources.unix
- 8 September 1989 — release 6.3.7, by FTP
- 3 March 1990 — release 6.4 beta, by FTP
- 7 May 1990 — release 6.4, marked comp.sources.unix
The 1984 first release predates the file and is attested only by the project's own summary, which has carried the exclamation mark for as long as the README has existed; no dated artefact from 1984 has been located for this page. Everything from July 1988 onward is dated in the source itself.
The two entries marked comp.sources.unix are the point at which nn became a program the whole network could get. That group was moderated — its own newgroup message says so, and its description ends with the parenthesis that marks moderation — and it was how substantial Unix software reached Usenet before the web. Release 6.4's README describes the shipment plainly: “The package is posted as 22 separate shar archives on comp.sources.unix”, a little over a megabyte including documentation, unpacked by feeding each archive to the shell in turn. A program arrived as two dozen news articles.
After 6.4 the history becomes a chain of maintainers, and patchlevel.h names each handover as it happens. Storm's own patches run from #1 in May 1990 to #16 in April 1991 — sixteen patches in eleven months, each tagged HIGH, MEDIUM or LOW for urgency. Then:
- Patches #17 and #18, November and December 1991, released by Larry Bouzane at Memorial University of Newfoundland; the changelog heads them “Unofficial” and records a later line, “Patch #17 and #18 made official”, in the next maintainer's name.
- Release 6.5.0.b3, 1 September 1993, released by Peter Wemm.
- From 28 July 1996, releases by Michael T. Pins: four further betas that summer, then 6.5.0 on 19 August 1996, and patches through to 6.5.6 on 5 February 2000.
- Release 6.6 on 18 September 2001, patched five times to 6.6.5 on 25 January 2003.
- Release 6.7.0 on 21 April 2005, after an alpha in March and a beta in April, patched to 6.7.3 on 15 November 2005.
- Then nothing for twenty years, and then patch #4 on 12 June 2026 and patch #5 on 15 August 2026.
That twenty-year gap and its ending are dealt with below. The shape of the chain is the ordinary shape of long-lived free software: an author, an interim caretaker or two, and then one person who takes it on and does not let go. Pins has now maintained nn for thirty years, several times longer than its author did.
The licence, and what it allowed
nn has had two licences, and both are worth reading because they mark the two eras of free software it lived through.
The 1990 terms, printed in release 6.4's README under the heading COPYRIGHT, are a permissive licence of the kind that circulated informally before anybody had standardised one. Copyright to Kim Fabricius Storm for 1989 and 1990; permission granted to anyone to use, modify and reuse the software for any purpose on any computer system and to redistribute it freely; three restrictions, being that the author is not responsible for the consequences “no matter how awful”, that the origin must not be misrepresented “either by explicit claim or by omission”, and that altered versions must be plainly marked as such. Anyone who has read the zlib licence will recognise the shape. The same section lists the borrowed components honestly — Henry Spencer's regular expression library from the University of Toronto, an unshar routine with no copyright notice at all, a decoder derived from a modified Berkeley original posted on Usenet, a full-name routine copyright Rick Adams and taken from the B News distribution — which is a fair sketch of how Unix software was actually assembled in 1990.
The current terms, headed NN LICENSE and last revised on 7 April 2005, are longer and more careful. They permit use, modification and redistribution in source and binary form on condition that redistributions “qualify as ‘freeware’ or ‘Open Source Software’”, which the licence then defines: either the redistribution is made at no charge beyond the reasonable cost of materials and delivery, or it comes with the complete source, or with an irrevocable offer to supply the complete source for up to three years at the cost of materials and delivery, redistributable under substantially the same terms. Two copyright notices must be reproduced — Storm's, for 1989 to 1991, and Pins's, for 1996 to 2005 — along with the warranty disclaimer. It is a licence written by somebody who had watched the 1990s happen and wanted the program to stay free in the sense he meant.
In practice the terms have been permissive enough for the distributions. nn is packaged by Debian, by pkgsrc, and by the FreeBSD ports collection, all of which are covered below.
The design argument: selection before reading
Everything interesting about nn follows from a single decision, and the program states it on the welcome screen it has shown new users since at least 1990. The passage below is word for word identical in the 1990 release and in the release shipped in August 2026; the only thing that has changed on that screen in thirty-six years is the name at the foot of it, which used to be Storm's and is now Pins's.
Unlike the other news readers you might be familiar with, the ultimate goal of nn is “not to read news”; actually, “nn” is an acronym for “No News”, and the motto of nn is: No news is good news, but nn is better.
The joke has a thesis behind it, and the thesis is a claim about scarcity. The readers nn was competing with treated the article as the unit of work: the program put an article in front of you, and your job was to decide what to do with it — read it, skip it, kill the thread, move on. That model is perfectly rational when a day's news is fifty articles. It becomes irrational the moment the number of articles exceeds the number a person can even glance at, because the reader is then spending their scarcest resource, attention, on the very articles they have already decided not to want.
nn's answer was to separate the deciding from the reading, and to do all the deciding first, on information cheap enough to scan. The manual states the sequence in two short paragraphs. When you enter a group, nn locates every presently unread article, extracts sender, subject and other relevant information, rearranges and sorts it, and puts it on the screen as a menu — one line per article. This is selection mode. You mark the interesting ones by single keystrokes. When you have been through the menu you hit the space bar, and only then does the program enter reading mode and show you the articles you chose. The manual is blunt about the consequence, in a sentence that would fit on a poster:
It is thus possible to go through ALL unread articles (without reading any of them) just by hitting space a few times.
The design premise is that this is the normal case, not the failure case. The website's feature list makes the same point from the other end: menu-based selection “significantly reduces the time spent on news reading. No keystrokes are wasted on articles you don't want to read, and only the articles selected on the menu will be read.” A reader who selects nothing has not failed to read the news; they have read the news, found none of it worth their time, and are done. The program's own name says so.
Two consequences of this are easy to miss. First, nn is a fundamentally different proposition from a threaded reader even though the two are constantly compared, and even though at least one reference work files nn under the threaded readers. A threaded reader reorganises articles by conversation and then still walks you through them; nn sorts by subject and posting time and then asks you to commit before it shows you anything. Second, the menu is a filter you operate consciously, once per group, on the record of what exists — which is why nn's users tended to describe the program in terms of time budgeted rather than features used.
What the menu actually did
The mechanics repay description, because the interface was tuned for a screen of about twenty-four lines by eighty columns and almost every choice in it is a response to that constraint.
Each menu line begins with an article id: a unique letter, or a digit if the screen can show more than twenty-six menu lines. Typing the id selects the article and highlights the line; typing it again deselects it and marks it unread, so that, as the manual notes, any article can be marked unread simply by selecting and deselecting it. The cursor then moves to the article after the last one whose attribute changed, so a run of selections is a run of single keystrokes with no navigation between them. Around that sit the commands one would expect and several one would not: a full stop selects the article under the cursor and advances, an asterisk selects every article sharing the current subject across as many menu pages as necessary, an at sign inverts the page's selections, and a range can be selected by typing its endpoints with a dash between them, so that e-k takes seven articles at once. The space bar advances: to the next page of the menu if there is one, to reading mode if anything is selected, and to the next group if nothing is.

The menu line itself comes in five layouts, numbered 0 to 4 and changeable at any time from inside the program. The default, layout 1, shows the sender's name, a line count and the subject. Layouts 2 and 3 drop the name entirely, and the manual explains why with an example rather than a principle: they are “intended for groups whose articles have very long subject lines, e.g. comp.sources”. Somebody had sat in the source groups and found the default wanting. Layout 4 is a hybrid that uses the default until a subject will not fit and then switches, per line.
The name field is limited to sixteen characters, and nn compresses real names into it by rule — reducing forenames to initials, stripping domains from addresses when no real name can be found. The manual's comment on the results is the driest sentence in it: the program “does a good job, but some people on the net put weird things into the From: field (or actually into their password file) which result in nn producing quite cryptic, and sometimes funny ‘names’”.
The subject field gets the same treatment for the same reason. On a usual eighty-column terminal it has about sixty characters to work with, so it is an approximation of the real subject line and nothing more. Articles are sorted by subject, so adjacent lines often share one; nn prints the subject once and marks the rest with a single greater-than sign, and it recognises the various forms of an Re: prefix and replaces them with that same character. A twenty-line menu of a busy thread therefore reads as one subject and nineteen tick marks — which is, the manual notes, the point: it saves “a lot of time in scanning the news articles”. With consolidated menus enabled the same run collapses further, into one line carrying a bracketed count of how many articles share the subject.
Underneath all of this sat an unusual piece of engineering. nn did not read the news spool when you asked it a question; a daemon called nnmaster maintained a database of article headers, waking every ten minutes to look at the time stamp of the news active file and adding or removing entries as articles arrived and expired. The 1990 README claims the payoff without modesty — the program starts in a few seconds “no matter whether you have 100 or 10000 unread articles”, at a cost of roughly one megabyte of database per ten thousand articles, and a subject search across every group on the author's own machine — “my Texas S1500 system” — took under twenty seconds against sixty-four thousand articles. Later versions could use the news server's own overview database over NNTP instead, via the XOVER command, and the current installation instructions open by telling administrators who are using it to ignore everything the documentation says about nnmaster. The idea outlived the implementation: build an index of headers, and the menu becomes free.
The database also explains the size of the program's furniture. A modern nn distribution still ships manual pages for nnmaster and for a dozen small companions around it — nnadmin, nnacct, nncheck, nngoback, nngrab, nngrep, nnpost, nnspew, nnstats, nntidy, nnusage, nnview — which is what happens when a newsreader has to be administered as well as run.
The other model: rn, and doing the right thing
The reader nn was arguing with was rn, written by Larry Wall and originally released in 1984 — the same year nn first appeared in Denmark. rn was itself a revolution against something older. Before it, newsreaders such as readnews were mostly line-oriented, built for the printing terminals of the early Unix minicomputers; rn was among the first to take full advantage of a character-addressable screen, preceded in that only by Kenneth Almquist's vnews.
rn's organising idea was the opposite of nn's, and it also had a slogan: do the right thing. Rather than asking the user to navigate menus or learn a command vocabulary per mode, rn made a handful of keystrokes mean the contextually obvious thing everywhere — the space bar going on to the next page, or the next article, or the next group, depending on where you were. The reader moved forward through the news in a single stream and made decisions as they arrived. It was, in the exact sense, sequential: rn also introduced the kill file, so that some articles could be removed from the stream before it reached you, but the stream was still the model. Its third innovation was invisible to users and mattered enormously to everyone else — a script called Configure that worked out for itself how the local Unix differed from every other Unix, which is the ancestor of every configure script since.
The family grew by patch. Stan O. Barber, working at Baylor College of Medicine, produced rrn — remote rn — a set of patches letting rn talk to an NNTP server rather than a local spool, and later took over rn's maintenance from Wall. Wayne Davison then wrote trn, another set of patches, which added threading at the article level using the References header that Usenet articles had long carried and almost nobody had used, together with an interface for selecting whole threads while keeping rn's interface philosophy intact. Scoring, a generalisation of the kill file discussed below, arrived later still in a fork called strn and was folded back into trn afterwards.

Wikipedia's account of rn describes the moment of maximum danger for the older program in a passage worth quoting because it is the clearest statement anywhere of what was at stake: users were switching “from a ‘read most, kill few’ model to ‘ignore most, read few’”, Kim F. Storm's nn was the first to implement the new model, and “it looked for a while as if nn would do to rn what rn did to readnews”. On that account trn is what stopped it — giving rn's users selection without asking them to give up the interface philosophy they already had.
That is an assessment, not a measurement, and there is no census of newsreader use to settle it. What can be said from the record is narrower and still striking. nn is the only one of these programs that got a Big-8 newsgroup of its own. The others got theirs, where they got one at all, in national or project hierarchies: the canonical newsgroups file lists fj.news.reader.rn for “rn family (rn, trn, ...)” and fj.news.reader.gnus in the Japanese hierarchy, de.comm.software.gnus in the German one, and gnu.emacs.gnus under the GNU tree. In the eight hierarchies that the whole network agreed to carry, one newsreader has an address and the rest do not.
tin, slrn, Gnus, and a caution about lineage
The rest of the field arrived in the years after nn's global release, and the dates are worth having straight.
- tin — announced by Iain Lea on 24 August 1991 in news.software.readers, under the heading “ANNOUNCEMENT: tin v1.00 — YAN (Yet Another Newsreader)”. It descends from TASS, whose source Rich Skrenta had posted to alt.sources in April of the same year. Urs Janßen has maintained it since 1996; it is BSD-licensed and was an early adopter of autoconf, which is why it still builds nearly everywhere.
- slrn — developed from 1994 by John E. Davis, for Unix-like systems and VMS and later Windows, extensible in the S-Lang macro language, and supporting scoring rules that highlight, sort or kill articles on the strength of their headers.
- Gnus — the Emacs answer. The original GNUS, by Masanobu Umeda, dates from 1987 and ceased to be developed in 1992; Lars Magne Ingebrigtsen began the rewrite in autumn 1994 under the recursive name (ding), and the result is part of GNU Emacs. Gnus deliberately blurs the line between mail and news, treating both as articles from different sources, which no other reader here does.
A caution belongs here, because a specific error has propagated widely and is still in circulation. A much-mirrored FAQ from 1995, discussed in the next section, ends its introduction with the line “Historical Note: nn is based on the tass newsreader”. The English Wikipedia's article on tin repeats the claim — saying of nn that “the latter is also based on TASS” — and cites that same 1995 FAQ for it. It cannot be right in that direction. nn's own dated release history begins in 1988 and its first release is placed in 1984; TASS was posted in 1991. Whatever the relationship between the two programs was, nn is the elder by years, and this page makes no claim about influence in either direction because the surviving documents do not establish one.
The newsreader-choice argument as a form
Arguing about newsreaders was a recognised Usenet genre, and it is possible to demonstrate this from the record without inventing a single thread, because the genre is named in the paperwork.
When news.software.readers was created in June 1991 its charter listed the topics it wanted — rn and its variants, tass, xrn, gnus, other platforms, design issues — and then added one line of house rules:
Religious wars - rn vs nn, or gnus vs xrn - are not encouraged.
That is a charter, written by people setting up a group, pre-emptively declining a category of argument that everybody already knew by name. The phrase religious war was the standing Usenet term for a dispute in which the participants' positions are settled in advance and the exchange serves identity rather than information; putting rn versus nn in it as the canonical example tells you how routine the argument was by 1991, eighteen months after nn got its own group.
The mature form of the genre was not a flame but a comparison table, and one of those survives in full. “Getting Started with News and the NN News Reader” by Nancy McGough, last modified 5 May 1995, was a periodic posting in the news.answers system with the archive name usenet/software/nn/getting-started, posted approximately monthly to news.newusers.questions, news.software.readers, news.answers and news.software.nn itself. Its section 1.1 is titled “Why Use nn? A Comparison of Unix News Readers”, and it is a model of the form: a three-line table sorting pine, tin, and nn-and-trn by “news reading power”, followed by parallel lists of advantages, disadvantages and neutral observations for trn and nn, marked with plus, minus, o and question mark, and ending with a bracketed request for more comparisons and a section headed “NN Testimonials” that asks readers to send theirs.
The document's judgement between the two heavyweights is the least partisan sentence in the whole literature: “Neither one is clearly better than the other.” Its lists then differ on almost everything else. trn is credited with true threading from the References line, a graphic view of the thread as an article tree, a friendlier group-selection level, and an active developer in its newsgroup; nn is credited with virtual newsgroups produced by subject, author or full-text search, an easier macro language, more powerful kill and select including boolean combination, faster automatic killing, digest splitting, the ability to merge newsgroups, and being “incredibly customizable” — a claim the same FAQ quantifies elsewhere as nearly two hundred run-time variables. It also records, in passing, exactly where the release history had got to: in May 1995 the current nn was 6.4.18 and the beta was 6.5.0.b3, which is what patchlevel.h says too.
Two entries in that comparison are about this page's subject directly, and they sit at opposite ends of the same list. Near the top of nn's advantages: “dedicated newsgroup (news.software.nn) for discussion”. Near the bottom, under its disadvantages: “not very active participation by developer(s) in newsgroup (news.software.nn)”. The corresponding line for trn is neutral rather than positive — its group exists but “also contains lots of non-TRN discussion”. That is a fair and rather melancholy summary of what a single-program newsgroup was worth in 1995: an unambiguous asset that the group's own subject was not much using.
Kill files
A kill file is a list of patterns a newsreader matches against articles, marking anything that matches as already read. The feature was first implemented in rn, as a file named KILL holding regular expressions matched against subject lines; it spread to every serious reader afterwards, because without it a subscriber to a busy group was reading the same argument for the fourth time by breakfast.
nn's implementation is unusually well documented, because the manual specifies the file format rather than merely describing the feature, and the specification shows what the program thought filtering was for. There are two ways in. The interactive one is a single key, K, available in both selection and reading mode, which runs a short dialogue: kill or select; match on subject or on name; the string or regular expression to match; this group only or all groups; and a lifetime in days, or permanent. The default offered at the first prompt is telling — kill this subject, in this group, for thirty days, “which should be enough for the discussion to die out”. The unit of nuisance nn expected was not a person but a thread with a natural lifespan.
The file format underneath is a small grammar, one entry per line, of the shape [expire time :] [group name] : flags : string [: string].... The group field may be a single group name, a slash followed by a regular expression matching group names, or empty for all groups. The flags select what is being matched and how: n for the sender's name, s for the subject, a for any article with a non-empty References line; a slash makes the string a regular expression rather than a substring; an equals sign makes the match case-sensitive and, for plain strings, exact rather than a substring; an angle bracket restricts the entry to follow-ups only, or to base articles only. Multiple strings are joined with an or bar or an and ampersand, with the and binding tighter, so that a rule written a|b&c|d fires on a, on b-and-c, or on d. Entries expire by time stamp, at which point nn comments them out with a hash for the user to clear later, and the whole file is compiled to a binary form whenever the text version is newer than the compiled one.
Two of the manual's own examples show the register. To kill every follow-up in a humour group while leaving the original jokes alone, the entry is a subject rule restricted to articles whose Subject line begins Re:. To kill the requests for help in the TeX group — and this is the manual's example, not one invented here — without killing the answers, the entry restricts a subject pattern to base articles: comp.text.tex:!s</:^HELP. Whether that would have been welcomed in comp.text.tex is a separate question; what it shows is that filtering was expected to be surgical.
The most characteristic flag is the one that inverts the whole idea. A tilde on any entry for a group causes everything not auto-selected in that group to be killed. The manual glosses it in the first person: “a simple way to say: I'm interested in this and that, but nothing else.” With one character, a kill file stops being a blacklist and becomes a whitelist — which is exactly the philosophical position the program's name had been arguing for all along.
Scoring, and filtering that outgrew the reader
The limitation of a kill file is that it decides in binary. An article either matches a pattern or it does not, and there is no way to express that three weak signals together are worth more than one strong one. Scoring is the generalisation: rules assign numeric weights to articles by header content, the weights accumulate in score files, and an article is ignored when its total falls below a threshold the user sets. It appeared in the rn family in strn and was merged into trn; slrn supports it directly; Gnus made it a first-class subsystem, and it is Gnus that the general literature reaches for when it wants an example of the technique.
nn stayed with the kill file, and compensated inside it — the boolean combination of match strings, the exact and case-sensitive variants, the tilde whitelist and the timed expiry are all ways of getting expressive power out of a matcher that has no arithmetic. It is a reasonable position for a program whose main defence was never the filter at all. In a reader that shows you the subject and the author of everything before it shows you anything, a great deal of what other readers needed a score for is handled by not pressing a key.
Filtering nonetheless kept getting harder, for a reason no client-side mechanism could address: from the mid-1990s a growing share of what arrived was not written by a participant at all. The response to that ran through server-side and third-party machinery rather than newsreaders — cancels, the conventions for identifying who had issued them, and the protocols that let one reader act on another's judgement. That history belongs to the alt.* page, which owns it, and to the administrative groups described on the news.* hub. The relevant point here is narrower: it marks the boundary of what a newsreader's design could do. nn's premise was that the reader's attention is the scarce resource and the reader is the right person to spend it. That premise holds while the articles are written by people.
The volume problem
nn was designed for a network whose whole feed a determined person could still read, and it went on being maintained into a network where that was absurd. The numbers are worth laying out, with their sources attached, because the design argument only makes sense against them.
At the beginning the quantities were trivially small. The original Duke software, A News, was designed for one or two articles a day; B News, which replaced it, was handling about fifty articles a day as of late 1983, according to the account in Wikipedia's history of Usenet. A newsreader for that world does not need a selection menu. It needs to show you the article.
By the time nn reached release 6.4 in 1990 the scale had changed by three orders of magnitude, and the README quantifies it incidentally while boasting about search speed: the author's own machine had sixty-four thousand articles across all groups to search at once, and nn's header database cost about one megabyte per ten thousand articles. Five years later, the nn FAQ discussed above opens its introduction with the contemporary estimate that “hundreds of thousands of messages arrive in the over ten thousand newsgroups each day”. That is a figure from May 1995, written by someone using the software, and it is the clearest single statement of why the program existed.
After that the measurements shift from articles to bytes, because the binaries groups took over the feed. The table in Wikipedia's Usenet article, sourced there to altopia.com, gives daily feed sizes rising from 4.5 GiB in December 1996 to 12 GiB in January 1998, 82 GiB in January 2000, 492 GiB in January 2003, 1.52 TiB in January 2005 and 37.35 TiB in January 2018, with daily article counts running from about 554,000 in January 1998 to nearly 74 million in January 2018.
Those figures need a caveat that is easy to omit and badly misleading if it is. They are the whole feed, and the whole feed is overwhelmingly binary attachments and automated spam, not conversation; the same article says so in as many words. It also records that as of 2010 all text posts in all Big-8 newsgroups together averaged about 1,800 messages an hour, or roughly 25,000 a day — a rounding error beside the binaries. That is not measured the same way as the 1995 estimate, which counted messages in all newsgroups rather than text in the Big Eight, so the two cannot be subtracted from one another; but no reading of them supports a picture in which discussion kept growing. The graph that matters to a newsreader goes up steeply and then comes down, while the transport it rode on grew without limit.
Readership was measured too, by the monthly reports Brian Reid compiled from sampled news servers, which are described on the news.* hub along with the group that carried them. No such report is quoted here for news.software.nn, because none has been located for this page; the one contemporary figure that survives for this group is the 1995 Xref number given earlier.
What the volume history explains is why nn's argument aged well and its implementation aged badly. The premise — that a reader should decide from headers and read only what they chose — became more obviously correct every year. The architecture that delivered it, a local daemon indexing a local spool, became less and less relevant as the spool moved onto somebody else's server, which is precisely the gap that Rene Seindal's NNTP support and, later, the shift to the server's own overview database were built to close.
What became of nn
nn is not a historical artefact, and this is the part of the article that most needed checking rather than assuming. The project's own site is at nndev.org, and its directory listings, README files and source archives were read for this page in August 2026.
The current release is 6.7.5, dated 15 August 2026 in patchlevel.h. It follows 6.7.4 of 12 June 2026 — the first release in twenty years, ending the gap after 6.7.3 of November 2005. The changes listed for the two are exactly the maintenance an old C program needs to keep compiling: a new nntp-forceauth variable to make nn authenticate even when the server does not ask it to, the renaming of an internal getline to avoid a namespace collision with the name the C library subsequently claimed, a workaround for a compiler default that changed under it, casts added to character-class functions, the header buffer enlarged “to work around ever growing email headers until I have time to rewrite header parsing”, and the disabling of the :debug command on FreeBSD because the system call it used is no longer supported. There is also a 6.8 beta, whose one new feature is an experimental :demime command that attempts to display MIME-encoded messages, with a frank note that backscrolling through the result “doesn't work very well (if at all)”.
Downstream, the program is in the standard collections:
- Debian ships nn 6.7.3-16 in trixie, the current stable release, in the news section, maintained by Cord Beermann, built for eight architectures — amd64, arm64, armel, armhf, i386, ppc64el, riscv64 and s390x. Debian's own package description is a small piece of the folklore in its own right, giving the motto in its expanded form and adding that nn is “designed to let you minimize the amount of time you spend reading news (or, more realistically, to allow you to follow even more newsgroups :-)”. The Debian build is client-only: it reads news over NNTP and can use the server's overview database, with no nnmaster.
- pkgsrc, the NetBSD collection, carries news/nn at 6.7.3nb7, updated in May 2026 by a commit that deals with “ctype functions faulting on invalid input on NetBSD 11” — the same class of bug the upstream 6.7.5 patch addressed three months later.
- FreeBSD's ports tree has news/nn at 6.7.3_3, last touched in January 2024, with no maintainer listed.
The connection to this page's subject has never been cut. The README in the source archive released in August 2026 still carries a section headed NN HAS ITS OWN NEWS GROUP, still describing news.software.nn as the unmoderated group for questions, answers, ideas, hints, information from the developer and patches. The manual's closing section says the same. The nnmaster manual, when it needs an example of a single group an administrator might collect, uses news.software.nn. A newsgroup created by vote in January 1990 is named in the documentation of software shipped this month, which is not a sentence that can be written about many things on the Internet.
The site also names a current FAQ maintainer, Sascha Geschwandtner, and points at the FAQ's home in the news.answers archive. That FAQ could not be retrieved while this page was written — the archive host returned an error on every attempt — and nothing is claimed here about its contents.
What the record does not show
The gaps in this story are specific, and worth listing so that nobody fills them by guessing.
- The vote. January 1990 is attested by the author; the tally, the proposal text, the discussion and the original charter wording are not in the news.announce.newgroups archive and were not found elsewhere. Lloyd W. Taylor is named as the person who counted the votes and nothing further about the count survives here.
- The traffic. One server's article counter on one day in November 1995 is the only measurement of this group's volume located for this page. There is no subscriber estimate, no posting rate, and no readership survey figure specific to it.
- The content. No individual posting to news.software.nn is quoted anywhere in this article, and no thread in it is described, because none was read for it. The archives exist and can be searched, and this page carries the standard links to them. Everything said here about what the group was for comes from documents about the group — its own newgroup message, the software's README and manual, the neighbouring group's charter, and a FAQ that was posted into it — and not from its contents.
- The 2001 rmgroups. The messages exist and are quoted accurately. Whether the named senders wrote them cannot be established from the archive, and the circumstantial evidence set out above points against it. No accusation is made and none is implied.
- nn before 1988. The 1984 Danish first release is stated by the project and is not corroborated by any dated artefact consulted here.
- Two Kim F. Storms or one. nn's project site links its author's name to the domain that appears in the author line of Emacs's cua-base.el. That is a link made by nn's maintainer, not a statement by either man, and it is treated here as strong evidence rather than proof.
- The encyclopaedias. There is no article on nn in the English Wikipedia; searches of the Danish and German editions found none either. For a program with a four-decade release history and a Big-8 newsgroup of its own, the reference literature is remarkably thin, and this article is built on primary sources for that reason.
Scope and limits
This page is part of a preserved directory assembled from the view of a mail-to-news gateway that ran between 2000 and 2004; how that gateway worked, and why the directory is shaped the way it is, is explained on the front page. The gateway carried news.software.nn, which is why the address exists here at all. It did not carry most of the group's siblings, and the directory should not be read as a census of the hierarchy.
The dated facts above were checked against primary sources during the writing of this page: the Internet Systems Consortium's newsgroups, active and control archives, together with the policy documents that describe how each is maintained; the news.announce.newgroups archive; the nn source distributions of 1990 and 2026, including their README, LICENSE, patchlevel.h, ChangeLog, INSTALLATION, welcome screen and manual pages, read from the tarballs rather than from descriptions of them; the project's own website; and the package databases of Debian, pkgsrc and FreeBSD. Where a claim rests on a secondary source it says so. Where a figure could not be sourced, no figure is given.
Judgements about which newsreader was better are reported here as the historical record reports them — as a documented genre of argument with named participants and dated documents — and are not adjudicated. The group is still listed, still unmoderated, and still named in the documentation of software released this month. Anyone who wants to see what is left of it can; reading Usenet today is covered on its own page.
Reading news.software.nn today
- Historical archive: Google Groups — news.software.nn (coverage varies by group and era).
- Open in a newsreader:
news:news.software.nn— the original site offered exactly this link, and it still works if your system has a newsreader registered for thenews:scheme. - Live access: point an NNTP newsreader at a modern server — see accessing Usenet today.
- The original news2mail e-mail subscription service ended in the mid-2000s and no longer operates.