this feels like a silly thing to say but even though i’ve been using linux since 2004 I feel like i’m learning recently that the impact of the GNU project’s software (and its design decisions) on me is even bigger than I thought

like even just the fact that (afaik) many of them used Emacs has an impact on me today

(please no “it’s GNU/Linux”)

@b0rk people mock the "GNU Coding Standard" because its specification of how to indent C is legitimately weird. But that's actually the least important part of the document. There is stuff in there about how programs should *behave* that's been much more influential.

https://www.gnu.org/prep/standards/html_node/Program-Behavior.html

Program Behavior (GNU Coding Standards)

Program Behavior (GNU Coding Standards)

@zwol ooh I should look at this thanks

@zwol “Please define long-named options that are equivalent to the single-letter Unix-style options. We hope to make GNU more user friendly this way.”

i had no idea this was the goal and it’s so good

@b0rk @zwol This is defining behavior from GNU. It doesn't exist in CP/M or DOS. It doesn't exist in Unix. This "GNU-ism" is so useful that people straight up stopped using POSIX `getopt(3)` over it.
@Conan_Kudo @b0rk @zwol CP/M and DOS were shitty Unix ripoffs and their options syntax was terrible
@bascule @Conan_Kudo @b0rk I always thought CP/M's command line interface was ripping off VMS, or possibly whatever DEC's OS before VMS was

@Conan_Kudo @b0rk @zwol Eh? There's definitely still a bunch of getopt(3) usage, even though getopt_long(3) is in most Unixes libc.

And when it comes to long options implementation (which if you see the dd command, inspired from IBM JCL, isn't just a GNU thing), there's often different behavior, for example accepting = as separator or not, as well as accepting abbreviated names or not.

Which can get a bit funky in codebases like git for example where long options are rather prevalent but it's subcommands are implemented in different languages.

@Conan_Kudo I recently started making a makepkg clone-ish and at the start I thought "Imma try to stick to pure POSIX 2024 (+ cURL and bsdtar)" and not only was the shell syntax very limiting (specifically arrays, but I can work around that with HEREDOCs and newlines) but what made me decide "nope, Imma stick to "bash and GNU coreutils" is that all the tools only define the short options. It makes the scripts so unreadable :(

on a different note: I recently learned that GNU getopt allows abbreviating all long options as long as they don't clash (e.g. specifying --dir instead of --directory)

@NekkoDroid Yep, there are so many nice things about the GNU stuff that people just don't realize are from GNU.
@NekkoDroid @Conan_Kudo Heh, the arrays are from the Korn Shell so it's actually pretty portable (like even *BSD, illumos, … default install portable) and are one of the things I wondered if they could get into POSIX with someone else like 2 weeks ago.