From: David Masover Date: 2009-12-06T08:55:23+09:00 Subject: Re: Best way to distribute an app On Saturday 05 December 2009 03:24:45 pm Roger Pack wrote: > > Essentially what I'd look for in an installer like this would be > > something > > that, first, either starts with a gem, or also builds a gem, to make the > > whole > > process that much easier for people who already know about gems. Then, > > the > > binary package (the exe on Windows) detects or installs Ruby and > > Rubygems, > > then installs gem dependencies using Rubygems (perhaps with ri and rdoc > > disabled by default). If it was designed for JRuby, it could do the same > > with > > the JVM. > > So what you would be looking for is instead of the equivalent of a "one > click installer" it's a one click installer that just installs a version > of ruby and any gems needed, then does other things? Well, now that I've seen rip, I'm not convinced gems are necessarily the end- all of Ruby packaging, but that's the idea. Or, more generally, something that installs the needed package manager if none is installed already, then installs a set of dependencies. That could actually be all that's needed, other than adding icons and such for the result -- the app itself could then be distributed as a gem. > It's the equivalent of an installer that > does 'net download' of some of its components, I suppose. The point here is not so much that it's a 'net download', as that it brings the advantages of a package manager to bear -- that is, chances are, there's a lot of overlap. Does every rawr app really need to include JRuby, MonkeyBars, Nokogiri, etc, etc? > It does go a bit against the mantra of {at least in the windows world} > an installer is an installer, but it has potential. There are 'net downloads' in the Windows world also. I can think of one way to mitigate this, though: The option of a full installer, but one which is aware of everything else that's installed. Consider the fact that just about every Windows game ever shipped includes DirectX, but you don't have one copy of DirectX installed per game -- it only installs/updates if you don't have a recent enough version already installed. Consider that with Rubygems, you can have multiple versions of a gem installed... To make it even better, make it possible to generate a full installer from any installed package. Thus, even if you installed with the net-installer (thus saving bandwidth), you can create a full installer to share over your LAN (thus saving more bandwidth). On the other hand, for this to work, we need a really robust packager. In particular, we need reverse dependencies -- I think rip has this? -- we need to not even prompt the user, but we need the ability to know that a given gem was installed as a support library for a given app, so that uninstallation works the way you expect. > Of course something like that wouldn't work for linux. Well, for Linux, it's less needed -- we have native package managers, and users are generally used to these. What's needed on the Linux side is a more universal package manager, some sort of meta package manager. I think GoboLinux has some good ideas with their "aliens" hierarchy -- they natively support Rubygems, and Gobo packages can depend natively on gems, or on CPAN modules, etc, without having to repackage every gem as a Gobo package. > I wonder what would be a useful cross platform tool... I'd say start with Windows and OS X, and even if Ruby is an awesome implementation language, we should shoot for language-independence. And the reason I say start with Windows and OS X is that neither has an existing package manager, so we wouldn't be stepping on anyone's toes by basically building netinstallers all over the place. I think Linux can be made even better, but it takes a lot more work.