this post was submitted on 27 Jul 2026
757 points (97.4% liked)

linuxmemes

32239 readers
666 users here now

Hint: :q!


Sister communities:


Community rules (click to expand)

1. Follow the site-wide rules

2. Be civil
  • Understand the difference between a joke and an insult.
  • Do not harrass or attack users for any reason. This includes using blanket terms, like "every user of thing".
  • Don't get baited into back-and-forth insults. We are not animals.
  • Leave remarks of "peasantry" to the PCMR community. If you dislike an OS/service/application, attack the thing you dislike, not the individuals who use it. Some people may not have a choice.
  • Bigotry of any kind will not be tolerated. This is an LGBTQ+-friendly community -- if that is a problem for you, you should leave.
  • 3. Post Linux-related content
  • Including Unix and BSD.
  • Non-Linux content is acceptable as long as it makes a reference to Linux. For example, the poorly made mockery of sudo in Windows.
  • No porn, no politics, no trolling or ragebaiting.
  • Don't come looking for advice, this is not the right community.
  • 4. No recent reposts
  • Everybody uses Arch btw, can't quit Vim, <loves / tolerates / hates> systemd, and wants to interject for a moment. You can stop now.
  • 5. 🇬🇧 Language/язык/Sprache
  • This is primarily an English-speaking community. 🇬🇧🇦🇺🇺🇸
  • Comments written in other languages are allowed.
  • The substance of a post should be comprehensible for people who only speak English.
  • Titles and post bodies written in other languages will be allowed, but only as long as the above rule is observed.
  • 6. (NEW!) Regarding public figuresWe all have our opinions, and certain public figures can be divisive. Keep in mind that this is a community for memes and light-hearted fun, not for airing grievances or leveling accusations.
  • Keep discussions polite and free of disparagement.
  • We are never in possession of all of the facts. Defamatory comments will not be tolerated.
  • Discussions that get too heated will be locked and offending comments removed.
  •  

    Please report posts and comments that break these rules!


    Important: never execute code or follow advice that you don't understand or can't verify, especially here. The word of the day is credibility. This is a meme community -- even the most helpful comments might just be shitposts that can damage your system. Be aware, be smart, don't remove France.

    founded 3 years ago
    MODERATORS
     
    you are viewing a single comment's thread
    view the rest of the comments
    [–] ICastFist@programming.dev 26 points 1 day ago (3 children)

    Richard P. Gabriel, in his essay “The Rise of Worse-is-Better,” expounds on this theme (see Appendix A). His thesis is that the Unix design philosophy requires that all design decisions err on the side of implementation simplicity, and not on the side of correctness, consistency, or completeness. He calls this the “Worse Is Better” philosophy and shows how it yields programs that are technically inferior to programs designed where correctness and consistency are paramount, but that are evolutionarily superior because they port more easily. Just like a virus.

    The highest achievement of the Unix-aesthetic is to have a command that does precisely one function, and does it well (...) This philosophy, in the hands of amateurs, leads to inexplicably mind-numbing botches like the existence of two programs, “head” and “tail,” which print the first part or the last part of a file, depending. Even though their operations are duals of one another, “head” and “tail” are different programs, written by different authors, and take different options!

    From The Unix Hater's Handbook

    (I like Linux, but it's not all sunshine and rainbows)

    [–] everett@lemmy.ml 11 points 1 day ago (2 children)

    That head/tail thing is kind of a goofy argument. For one thing they aren't duals; tail is naturally more complex because the end of a file often changes and the application can optionally keep showing you the new output. Also, the fact that they're separate applications in the first place is arguably better than the a one-application approach, which would always require a command line switch to select between outputting the start or end of a file. And finally, while I guess this could vary between implementations of head and tail, mine has identical switches for all the common options.

    [–] qqq@lemmy.world 2 points 21 hours ago* (last edited 21 hours ago)

    I initially agreed with your take there but I actually think they're a great argument for their point. head and tail are the exact same abstraction. Their implementations will be quite different, but they both serve "provided this data, give me these lines". Consider instead that these are simply operations on arrays and actually they map perfectly to Python slices: data[:10] and data[-10:]. This abstraction mapping also shows that, imo, the tool should provide data[n:m] and it would still be entirely consistent with the Unix philosophy. In fact, this tool exists in the Unix toolkit: sed -n n,mp. Three tools then are currently required for the simple concept of "slice lines". I also think it's a bit of a mess. You could replace head with sed fairly easily: sed -n '1,10p' but not tail (it is possible, but quite slow and very opaque)

    As an aside I actually found this quite frustrating myself because I don't like reaching for sed in the n:m case (I always forget and end up piping head to tail) and ended up writing my own tool for essentially this style of slicing input, also replacing probably my least favorite use of my least favorite Unix tool, dd, to slice arbitrary byte sequences. The tool doesn't feel overloaded and I use it quite often.

    (I'm sure many people have written this same tool. There is probably a widely known open source option that I've just never come across)

    [–] hirihit640@sh.itjust.works 6 points 1 day ago (1 children)

    They could have been two commands that call a single parent command with different options. For example, imagine if cat had an option -N to restrict the number of lines that was printed, and also an option -t to start from the end. head would just proxy to cat -N and tail would proxy to cat -N -t. Combining the three into a single implementation reduces total LoC and opportunity for bugs. Also reduces total maintenance burden.

    I believe busybox is like this actually - a ton of Unix commands in a single package. It's used by Alpine Linux, a tiny and performance linux distro commonly used by docker containers.

    [–] LodeMike@lemmy.today 0 points 1 day ago (1 children)

    Busybox is literally just a bundle. That's its whole purpose. It doesn't reimplement anything.

    [–] hirihit640@sh.itjust.works 4 points 1 day ago* (last edited 1 day ago)

    Some quick research says that it is indeed a re-implementation. The first line of the wikipedia, says:

    BusyBox is an implementation of many Unix commands in a single executable file.

    You can download the source code yourself to verify. And if you've actually used Alpine Linux before you would have also noticed that the commands provided by busybox have only a subset of the options provided by their GNU coreutils counterparts.

    Please do your research before so confidently correcting other people.

    [–] LodeMike@lemmy.today 3 points 1 day ago (1 children)

    The head and tail programs also do completely different things. What differences in options do they have?

    [–] Viceversa@lemmy.world 4 points 1 day ago* (last edited 1 day ago) (1 children)

    Really completely different? Do they not print first / last lines of text from a file into the terminal?

    [–] LodeMike@lemmy.today -1 points 1 day ago* (last edited 1 day ago) (1 children)

    The way they do it is fundamentally different. Head just reads until number of newlines is the target number. Tail has to first read the entire file and keep a buffer of the file and/or offsets for each line ending to determine what the last 10 (or so) lines are.

    This idiot (Gabriel) probably thinks exclusively in the real world paper line analog.

    I also just looked at each program's command line options and they're identical. Less things only Tail can do (because they're fundamentally different operations)

    [–] qqq@lemmy.world 6 points 1 day ago* (last edited 1 day ago) (1 children)

    This idiot (Gabriel) probably thinks exclusively in the real world paper line analog.

    Typical of Internet discourse to just immediately brand someone you disagree with an idiot... That "idiot" is one of the designers of common lisp, among other things. You're allowed to disagree with a smart person too you know

    [–] LodeMike@lemmy.today -3 points 1 day ago* (last edited 1 day ago) (1 children)

    OK. Designers of programming languages can be idiots.

    Lisp is a bad language IMO. Way too mathy. Nobody programs like that anymore for a reason.

    [–] Viceversa@lemmy.world 2 points 1 day ago* (last edited 1 day ago)

    Programming language is a tool. Do you think there're no more tasks left where "mathy" programming language would be preferable?

    [–] LodeMike@lemmy.today 3 points 1 day ago* (last edited 1 day ago) (2 children)

    "This program sucks because it doesn't come with the world's most confusing GUI and doesn't do a trillion things"

    If you ask this person what "technically inferior" actually means you'd probably get a different answer every day.

    [–] ICastFist@programming.dev 2 points 1 day ago (1 children)

    But that's not what either of the guys complained about

    [–] qqq@lemmy.world 2 points 22 hours ago

    Yea what a hot take that was, critiquing words that were never there and then calling the person an idiot.

    [–] Viceversa@lemmy.world 4 points 1 day ago* (last edited 1 day ago) (1 children)
    [–] LodeMike@lemmy.today 2 points 1 day ago

    Yes and so do simple CLI tools that work. Head and Tail are about the worst examples because they work very well and also do very different things.