1. 13

An engrossing long-form read about the backstabbing, naked ambition, and political back-and-forth behind the ncurses library


  2. 4

    Note that this is not about the politics behind decisions about ncurses, such as whether to include certain features. Rather, this is about the politics of the ncurses license’s development over time – who was credited with the copyright, who else was credited in what capacity, and what the license terms were.

    1. 2

      And, frankly, it doesn’t make either party look great. It’s more like an “airing of grievances” and wallowing in grudges.

    2. 2

      Am I the only one who thinks that *curses (or at least its role as the de-facto way to utilize features beyond “dumb” terminals) should be deprecated? The database of terminal incompatibility might’ve made a lot of sense back when terminals were hardwired physical machines, but today we have standards (ANSI calls theirs' deprecated, but I don’t think that matters). Nonstandard software terminals can be patched, and those who insist on running incompatible terminals (whether emulated or hardware) can pay the price by running something like tmux or screen between the terminal and the application.

      Just having every “smart” terminal application link to some library and query a database sounds so complicated and bloated when driving an ANSI-compatible terminal requires just a handful of defines plus a function to query the window size and maybe toggle canonical mode: http://guu.fi/termset.c

      And it’s not just bloat; it’s complexity that makes things potentially fail while just assuming ANSI would work. If you’ve ever tried to connect to a (older?) Solaris box while using rxvt-unicode, you’ve probably experienced it. Terminfo not found – all of your beloved shells and editors and whatnot act dumb now. Quick, find the terminfo description. Remember how to compile it? Oh yeah, even if you do, you’ll find out that rxvt-unicode is too long a name and you need to rename the entry. And then you need to change your TERM to match… all this hassle to tell the system that yes really, most ANSI escape sequences work just fine. Things would have worked just fine if the applications just trusted the damn terminal to support ANSI.

      It doesn’t help that a certain seemingly butthurt[1] maintainer refuses to just ship the entry for urxvt with his library. So every system that uses ncurses has to patch it in.

      It doesn’t help that ncurses as an API for controlling the terminal or drawing “windows and dialogs” isn’t particularly good. It’s not terrible, but if you’re doing anything fancy, ncurses just gets in the way. And if you don’t want windows and dialogs (which I hope you won’t; leave them for use in the GUI land), ncurses again provides very little.

      So what does all this complexity really give us?

      [1] https://lists.gnu.org/archive/html/bug-ncurses/2009-10/msg00032.html

      1. 3

        Half agree. For the most part though, setting TERM to xterm works pretty well. If you’re going to assume some baseline feature set in all terminals, just set term to be one.

      2. 1

        goes to show how valuable it is to have services like github/bitbucket/etc, where all of this can take place completely in the open.

        1. 3

          I don’t see how GitHub is significantly different from the mailing lists used in the story. Mailing lists are visible to everyone too.

          The mailing list interface might be somewhat less convenient, but I bet people in those days used mail readers that were more optimized for using mailing lists. And though the story includes private emails between developers, GitHub doesn’t stop that either – every Git commit includes an email address to which you can send a private email.

          1. 2

            they were manually creating contributor lists; with publically-managed source controlled you can just drive it. it seemed to be that the main beef in that article was w.r.t. contribution recognition and who owned what.

            1. 4

              If the maintainer clicks “accept pull request”…

              If they instead take most of the code from your patch, put it into a file with their name (while adding a few bugs), it’s harder to tell.