9 ms·
/usr/local/bin has absolutely nothing whatsoever to do with programming. Nothing. Zero. Zilch. It is completely superfluous knowledge. It is only required beca
by user-the-name 6y ago
/usr/local/bin has absolutely nothing whatsoever to do with programming. Nothing. Zero. Zilch. It is completely superfluous knowledge.
It is only required because, as the author correctly points out, the tools we use are BAD. They are absolutely fucking AWFUL.
/usr/local/bin is an implementation detail from an OS nobody has used for decades. It's still here because we refuse to fix these ridiculous things. Nobody should need to know this.
- kichimi 6y agoThe server you submitted your comment to uses this 'OS nobody has used for decades'. The OS you wrote this from, also uses this implementation detail.
- user-the-name 6y agoIt most definitely does NOT use that OS. That is a ridiculous claim.
- maweki 6y agoEvery OS, Windows as well, uses the concept of search paths, namespaces, and environmental variables.
- dijit 6y agoI think he's speaking about First Edition UNIX, and, yes, we don't use that operating system. We just use operating systems which implement concepts derived from there. So, technically correct, though the argument has little merit.
- user-the-name 6y agoThe point is, "/usr/local/bin" is an artifact that made sense on that system, and that system alone, but we started using it elsewhere, and not it is so firmly established we do not dare to change it, even though it is a completely arbitrary choice with no relevance to modern systems.
- maweki 6y agowell, yeah. Every path and name ever in all of history is arbitrary. As is the seperator between the components.
- lionkor 6y ago> completely arbitrary choice with no relevance to modern systems sounds like you never learned anything about computers before deciding you want to write software for one. It's pointless to argue with someone that has no idea about even the basics of a common OS.
- user-the-name 6y agoI've used and programmed computers for over three decades.
- dijit 6y agoThis will sound accusatory, but there is an allegory: "There are people with 30 years experience, and there are people with 1 year of experience repeated 30 times."
- user-the-name 6y agohttps://news.ycombinator.com/item?id=25790033 https://news.ycombinator.com/item?id=25790033
- deleted 6y ago[deleted]
- cxr 6y agoPlease respect the HN guidelines and don't include baseless insults in your comments to other users.
- AnIdiotOnTheNet 6y agoCould you try being more condescending? I can't tell if you actually work in tech yet. We can know how and why '/usr/local/bin' came into being while still disagreeing that it makes any sense to keep using that today. We know why '/sbin' and '/usr/bin' exist separately from '/bin', yet the distinction is completely useless today and so many systems just symlink it all together! It is not unreasonable to suggest that just because we keep doing things a certain way means that doing it that way is the right way to do it.
- dijit 6y ago> /usr/local/bin is an implementation detail from an OS nobody has used for decades. Are you taking the piss? Should we also remove SOCKET's because they were introduced in that same OS? It should be noted that _EVERY_ modern operating system implements a "path" system, even the ones that are very divergent.
- maweki 6y agoAlso, Namespacing and search paths are a concept in every environment where people name things. Be it the filesystem or a programming language itself. Even in normal Life, when identifying people or things, we have concepts of this everywhere. How can people see that as pointless?
- TeMPOraL 6y agoAnd environmental variables, too. You can see the same pattern: process :: function path :: namespacing command line argument :: function argument environmental variable :: dynamically bound variable (Ok, that last concept may be alien for non-Lisp people.)
- user-the-name 6y agoShould we remove sockets? Possibly. We could most likely design a better API today.
- kaoD 6y agoGo ahead and do so, please. You keep saying that things could be better but show no counterexample. Lead the change or stop whining. Nobody is going to do the job for you if they're satisfied by their current tools, especially if they think you're wrong. Do it and prove everyone else wrong. If everyone thinks the status quo can't be improved, but you're enlightened, it's your chance to turn your "likely can be improved" into reality. The non-programmer user base is immense. You can get rich by selling your alternative.
- 6y ago
- malux85 6y agoI've been programming for 25 years now, about 20 of which as a developer at billion dollar companies, google, facebook and various high scale hedge funds, including systems that serve billions of users a day. I have had a hobby in embedded programming and FPGA programming, compiler design and distributed deep learning. All of which used /usr/local/bin and $PATH. Every system, regardless of programming language across python, C, C++, java, go, erlang. Saying /usr/local/bin and/or $PATH "has absolutely nothing whatsoever to do with programming" is total rubbish. Programming as a field doesn't just include domain and syntax knowledge of a programming language, it includes ALL of the system implementation details below it, and YOU ARE EXPECTED TO KNOW THEM. Saying something so basic and fundamental "has absolutely nothing to do with programming" only shows a terrible lack of systems knowledge, this is used in unix, linux, bsd, embedded and massive server scale deployments. Acting like this stuff is somehow below you, just shows intellectual laziness, this stuff both BASIC (easy to learn) and FUNDAMENTAL (applies almost universally in many systems), and if you acted like this during an interview or working at anywhere with non-trivial setups you'd be laughed out of the room.
- user-the-name 6y agoThe reason I say it has nothing to do with programming is that none of all of these tools that make you rely on this stuff NEED to do so. They chose to. But they don't need to. This is an implementation detail that is entirely orthogonal to the rest of the task of programming. Superfluous, and could be replaced at any time. And I note you immediately jump to the conclusion that I am too stupid to know these things that you know because you are clever. And that is EXACTLY the problem.
- malux85 6y agoNo, I was just saying that in my vast experience the two things that you described as: "absolutely nothing whatsoever to do with programming. Nothing. Zero. Zilch. It is completely superfluous knowledge" Were indeed critical components to all of these systems, and organisations, and that it's not a big ask to require a programmer to know them. Also, on what authority do you decide what is programming and what isn't?
- aspaceman 6y agoYeah but they're bad cause they have to be. I can't just wave my magic wand and eliminate Bash, and all $PATH nonsense. It existed before. So as a programmer, I expect you to know about it. There may be a day when the knowledge is obsolete. Where we can coordinate politically and socially enough to eliminate all usage of bash and $PATH. But those are social and political problems. As a programmer, I expect you to have the technical knowledge necessary to do your job. Stop complaining about the social and political context that brought $PATH to existence and just know how to use it, and don't write something like it yourself. Programming is not AWFUL. People and the social and political aspects of interacting with others is AWFUL and always will be. We work around it, we make it better, and we improve it. But no, our tools are not CRAP, they're not AWFUL. We build amazing, wonderful things with these tools. What a short-sighted perspective. Just pass. Seriously.
- robertlagrant 6y agoI haven't seen anyone mention why $PATH is nonsense, and what a better system would be.
- lionkor 6y ago> /usr/local/bin is an implementation detail from an OS nobody has used for decades Linux, MacOS, the BSDs... They're very much used today, not just decades ago. the /bin, /usr/bin and /usr/local/bin are very simple to understand after around 10 minutes of looking at the contents of / (root). */bin/ has binaries, */lib/ has libraries, */include/ has headers. Its as simple as it gets, I dont see a way you could make a "better" system, other than maybe renaming "bin" to "binaries" for the 5 people on the planet with an irrational fear of common abbreviations.
- user-the-name 6y agoAnd what does "usr" mean?
- RealStickman_ 6y agoUser System Resources
- user-the-name 6y agoThat is not what it meant when it was created. Apparently some people have retroactively tried to change it mean that, but, that is just a complete nonsense phrase.
- artimaeis 6y agoRight, as far as I understand it originally was just short for "user". It's where home directories of users were placed. Now that it's been relegated to storing user-usable programs & data it makes sense to me that it's separate from say /Users, but I suppose it could be aliased to something like /UserProgramsAndData for verboseness and clarity to newer users. But regardless, "User System Resources" is a fairly useful phrase, it's there to separate their system resources (programs & data) from their personal resources (which should be in their user directory). But, a system _does_ have users. Those users _do_ have programs. There's a hierarchical relationship. I've been following along with your comments in this thread and I just don't follow what you're getting at here.
- deleted 6y ago[deleted]
- jjice 6y agoI'd say programming (at least modern programming) involves knowing one's environment and knowing how to get things done in relation to the actual code writing. Also, using the search query "/usr/local/bin" in Google returns this[0] link first. This is my real issue. If a simple web search returns a good result first that gives you a good overview and gives you more background knowledge and more terms to search for and flesh out your knowledge, then there is little excuse to say learning is too hard. If you don't want to learn, that's fine, but complaining about learning being too hard here is unjust. [0] https://unix.stackexchange.com/questions/4186/what-is-usr-local-bin https://unix.stackexchange.com/questions/4186/what-is-usr-lo...
- kortex 6y agoAll environments for computer development need to manage some amount of abstraction to bootstrap that environment and get programs to run. In nixes, it's the bootloader, the kernel, and shell (with its ENV). When you issue the command `node` to a computer, what does that actually mean? Your Delphi setup probably just hid most of that abstraction from you, the way most people need not worry about the bootloader. But env is kind of unavoidable. It's like the Construct from the Matrix. The staging area for all other programs. I have struggled a lot with the nitty-gritty of ENV over the past few years and I agree with you that maybe there is a better way. /etc/, Conda, virtualenv, docker, ROS, Windows registry, they all deal heavily with managing the environment, and all have their own thorns. Then you have kube, consul, ansible, and all the fun of distributed environments. The bottom line is, if you want multiple, orthogonal runtimes, you need an abstraction for managing namespaces. PATH is actually one of the simplest mechanisms to achieve this.
- flippinburgers 6y agoEvery linux environment in the world is in disagreement with you.
- moistbar 6y ago>/usr/local/bin is an implementation detail from an OS nobody has used for decades. /usr/local/bin is where most Linux distros put binaries that were built locally, as opposed to those that came from the package manager... Not to mention, if you don't understand how and where your binary is supposed to run, what on earth are you doing making it in the first place?
- deleted 6y ago[deleted]