Ask HN: What are the different means of distributing software?
I just realized that I've gone through school and worked for a few years without really appreciating the differences between the different means of distributing software.
For example, if you write a Java app, presumably you give people a jar to run, and this requires your users to have Java installed (I think?). On the other hand, if you write an app in C, I assume that they don't need anything installed? Or perhaps they need libc which can be assumed to be on every modern OS?
These are the kinds of questions I have. If anyone could give me some material to read or explanations I would really appreciate it.
Thanks!
3 comments
[ 3.0 ms ] story [ 27.7 ms ] threadAs for my opinion: I do not believe there is one language that has the lock on easy/hard deployments, some definitely make it more challenging but overall they all have their good and bad parts. In my experience, C/C++ can be both the easiest and hardest to deploy. For example, I did a small sample console level C++ program running on OS X for someone a while back, literally copy and run, super simple. On the other end we have developed a sophisticated piece of imaging software for a client in C++ that uses the GPU etc. It has required about a week of time to get the build to work on linux and OSX machines, and we are still tuning it. This is simply because there are so many pre-reqs that have to be configured properly and generally built for the specific machine and OS to get the most out of the software and hardware.
At the same time, Java's promise of write once run anywhere is reasonable for many things, but you'll find generally is a bigger challenge then initially anticipated. .NET is honestly probably the easiest in my experience to deploy for Windows environments, and I am fond of Node.js apps on nix as they are pretty damned easy too (npm really is a huge reason why).
As for things to watch, you already have the right idea, its library, library version, library location in some cases, DLL Hell on Windows still isn't totally gone, binary compatibility on nix, etc. And just because you write something in C doesn't mean you won't have deployment issues, as the versioning of libraries and features you use can become very specific. At the same time, C/C++ is one of the most deployable languages across devices, but that comes at some complexity.
desktop: usually a compiled binary. I've also seen flash and unity compiled to native binaries. Bytecode languages like Java and .NET are also a possibility.
app store: iPhone and Android