

Ask HN: What are the different means of distributing software? - rifung

I just realized that I&#x27;ve gone through school and worked for a few years without really appreciating the differences between the different means of distributing software.<p>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&#x27;t need anything installed? Or perhaps they need libc which can be assumed to be on every modern OS?<p>These are the kinds of questions I have. If anyone could give me some material to read or explanations I would really appreciate it.<p>Thanks!
======
davismwfl
Honestly this is a huge topic that I think has as many facts as opinions. And
to be fair, you are not alone, rarely have I hired a new/recent grad that knew
how to do deployments well, unless they had internships that taught them or
built some software to deploy themselves. Experience is what helps. For
resources to use, I think your best bet is narrowing the topic some to a
specific language (or 2) you are working in (and ideally target OS or OSes),
then it is a lot easier to help you with resources. e.g. targeting Windows and
_nix is tougher then targeting_ nix alone, or Windows alone, regardless of
language.

As 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.

------
fsk
web-based: javscript usually, unity and flash also are a possibility. At one
time Java was the choice for this, but not so much anymore.

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

