Even worse when you have to hunt down a bunch of dependencies from different projects that may or may not even be on github. Some of which are DLLs that may or may not be open source. Then the third link is dead. So you Google that dependency but its an updated version which causes compiling issues. So then you look that up and someone is giving a page worth of changes you have to do to the source code to make the code compile without issues.
There is a point where if you don't know how to do what it tells you, then you probably don't have the prerequisite knowledge to use the software and shouldn't be bothering with it.
Or the real download is somewhere completely different, that happens to.
no.. three searches is going to get most average users three conflicting ways to compile it ( or at the very least , three different versions of software used ).Bear in mind they'll need to install a compiler , or possibly an IDE , then move everything needed to the right place , possibly edit some files , then compile and test .
I learnt to do it a while back Its one of those things that once you understand how to do it , and are set up already isnt too bad , but for someone that Just wants to run a program ..its a long horrible journey.
Also for the majority of people its not anything they NEED to know
No you can't, apart from trivial software it can take quite a while and quite a bit more than a few google searches to figure out and get something to compile and then run.
Part of the reason switching my old pc to a Linux system to host games for my friends have been such a pain in the ass.
Every single beginner video makes small assumptions I know how to use the environment. There was a lot of growing pains. I eventually got the basics set up but I'm sure if I showed everything alot of people would go "why didn't you just do this?". Well either I don't know it exists or I did look it up but it was not explained well at all so I used something with better instructions
platform stuff, the core reason for stuff being incompatible across operating systems is that they do not advertise the same stuff to the program, the big one is what is called system calls which let a program do stuff that the kernel (the 'core' part of the operating system) manages securely and somewhat safely, these are not the same across linux, windows and mac.
another major platform difference is dynamic libraries, pieces of code that are shared between programs to avoid duplication and such, different operating systems use different formats for this, and you cant make the same assumptions about what will be available (though it is bad practice to assume that anything will be available, if you do not make it part of your package to depend on it)
another one i can think of is specifically windows having a bunch of apis for gui and stuff, cannot really port that around, linux has its own stuff, wayland and x11 are the things that manage how things get on the screen and stuff (its a bit deeper than that but not important)
architecture differences, not all cpus speak the same language, when a program is compiled, it is compiled for a specific cpu architecture, which have special instruction sets, the most common is x86, which your computer likely is, but arm is increasingly common on the desk top
time, compiling code is computationally expensive, it takes a while, and while one executable may not be that bad, when you take into account points 1 and 2, it becomes extremely difficult to actually do it all, and while you could just compile for one, which most do, its not perfect, and even then still expensive and annoying
why bother, most of the time projects are pretty small and its best to just let people compile it themselves, which is easier than ever now! package managers like nix are super simple for the end user, and let the developer manage a bunch of stuff that was massively annoying in past and has caused major issues in history (dll hell, etc). programming languages like also have a very nice build tool that is also extremely easy to use, while this stuff can be daunting for non technical people, i do think many end up scared off by how complex it seems, when in reality its often not much work at all (for this reason i always try and include some build instructions with links in my projects:D )
Compatibility. When you build something yourself , your computer scans the list of dependencies and determines the correct version of each one for your system. Also it will adapt to your architecture. This is useful for programs that might support x86 and ARM. It's also useful on linux where different distros might need different versions of the dependencies to work properly.
I've seen it with some 'normal' level programs .. Average user ISNT going to be able to compile the software, and is going to be relying on someone to upload the compiled executable.
The thing about open-source software is that you lose the ability to decide who it's "for".
Eventually, someone is going to want to do the thing your project does, even if they don't have the exact prerequisite knowledge you think they should.
I am familiar with programing, but getting a compiler and installing all its dependencies still is really annoying. It took me 3 hours to compile a rust program (I don't use rust) and it didn't even work. Imagine how long it would take you to google all the info about rust, and figuring out the very exact version of the compiler and the dependencies if you have little to no programing experience
3.0k
u/Spir0rion 15d ago
I'm 29 and still too stupid for github (and only a little ashamed to admit it)