I'm looking forward to Perl 6. I think Perl 5 was a major thing, and Perl 6 can be even bigger in terms of increasing the popularity of Perl in the world.
One feature that I think is important in this respect is a way to ship Perl programs. Right now, the consumer typically will have to maintain a Perl installation, install modules, etc.
I'm not saying how it should be done—static linking byte code, bundling, automatic downloads of modules, standard install maker, or some combination of those—only that it should be possible to send a program to someone and that customer can install it without caring that it's written in Perl, or performing any other steps.
Any other thoughts on the topic, or specific solutions?
—John
Re: The Future - Shipping Applications Written in Perl
by tinman (Curate) on Jun 20, 2001 at 01:39 UTC
|
Coming from a decidedly java-centric background, and working with people who do not use Perl regularly, I have also felt the need for this.. I'll just note a few thoughts I've had on the topic, a full blown solution, unfortunately, isn't something I can offer... any way you ship an application, there are bound to be tradeoffs..
The first, much maligned method is compilation as an executable.. as merlyn has pointed out, it doesn't promote reuse of the Perl interpreter (essentially, an interpreter is bundled with each executable), and executable compilation (at least on Win32, where I use it) is still a young technology.. You need to explicitly include modules sometimes, sometimes the darned thing just doesn't work anyway... with that being said, its still great way to ship applications (yes, all 2+ mb of it).. No one needs to know or care about which language the app is written in, and excluding any fatal errors, no one will ever know (on fatal errors, you get a PERL2EXE prefixed error message)...
Unfortunately, a Perl interpreter is not standard on either MacOS or Win32.. this is where Java might have an advantage, because a valid JRE is usually installed with a browser and at a pinch, a Java app can run on that JRE (it usually dies horribly, but an option with a small chance of working is better than no option at all :o). Visual Basic, I believe is similarly blessed, at least on Win32
Other methods.. well, I've discussed bundling in the form of a question, some time back.. and I think its a valid method to try.. especially for modules which are not part of the standard distribution.. a reasonable thing to do is to use lib and have the module as part of the source itself.. This still doesn't solve the problem of the interpreter on the machine though..
I don't know about the feasibility of the next method, but Python and Java both have some form of it.. essentially, bytecode compile the source, make a bytecode image (with all the necessary module code compiled in) and ship with a scaled down version of the interpreter which just executes code (it doesn't need to load, locate or compile any code, just execute it).. I don't know if its practical, really, or how much of a saving this will be... but its something that could be borrowed from the other languages that use this method...
Note to self: look at the backend modules on CPAN
Umm.. the final solution of course, is an automatic installer.. if there are any Java people out there,
Webstart is one tool that is really good.. it automatically installs and runs an application, so that distribution is taken care of.... this however, requires a net connection and that is not always feasible..
Oh, and the absolute final solution (I promise :o): download the appropriate Perl binary or compile from source, and start maintaining a Perl installation on the client machines.. guaranteed to work, and with things like CPAN.pm, PPM and other install managers, the administrative hassles can only lessen...
Random pie in the sky idea: Have a Perl installation on a server, and have clients contact this known server for compilation.. sort of like RPC or SOAP, if you like.. (please don't flame me about the security implications, I know, I know! :o) at least, you won't need to install Perl on all the machines...
Well.. apologies if you fell asleep during this rambling reply :o) wake up now, and go get yourself a Perl installation if you don't have one already.. that seems to be the best solution for now...
| [reply] [d/l] |
|
Great reply to an important question.
I have only minor additions.
I've found things like Perl2exe to be too "clever" and thus not overly hard to break. I find the idea of identifying which files are actually used by a script and packaging them all up together to be very handy. But I find it a bit silly to package them all up into an executable that tries to run the script when you run it. I'd rather just pack them up into a (possibly self-extracting) zip file that expands to the script and a subdirectory contain the bits of Perl you need for it. By doing this, you won't break anything (other than failing to identify some of the required files, which is why they invented testing).
For the Perl scripts I've distributed, the solution has always been to include a full version of Perl w/ any needed extra modules and give the recipient the option of installing that or maintaining their own copy of Perl if they prefer (or just send the script, of course, but that isn't the kind of case we are discussing here).
Packaging up a version of Perl for a specific operating system is nearly trivial (you use zip or tar+gzip).
Under Win32, the one minor problem is that if you want to allow the recipient to install more modules then you have to update Config.pm based on where the recipient unpacked your archive. But that code isn't hard to write and prewritten versions can be found.
Under Unix, the (perhaps larger) additional problem is allowing the recipient to specify what directory Perl gets installed into. I've previously built Perl such that the @INC paths were rediculously long and then would patch the perl executable to replace these based on the install location chosen. Quite a hack, but it worked. /:
For larger subsystems, having a "private" copy of Perl included in the subsystem makes a lot of sense because Perl isn't really that big compared to most subsystems and doing this makes your QA department's life manageable.
Perl6 is intended to support "compile to Java engine" so you could ship your Perl6 applications as "compiled Java".
-
tye
(but my friends call me "Tye")
| [reply] |
|
| [reply] |
Re: The Future - Shipping Applications Written in Perl
by TGI (Parson) on Jun 20, 2001 at 01:49 UTC
|
Check out Perl2Exe. Active State has a similar product.
I find the idea of getting Perl to compile Java bytecode very interesting. Then we can take advantage of any java installation to run our Perl.
TGI says moo
| [reply] |
Re: The Future - Shipping Applications Written in Perl
by mirod (Canon) on Jun 20, 2001 at 15:51 UTC
|
Brian Ingerson (of Inline fame) has a couple of ideas on the subject that he explained at YAPC. It involves peer-to-peer distribution of (already compiled) modules, with a central repository storing only the MD5 for a module/system pair. this is very similar to what Napster does. This way you can get the "module distribution" from any registered user that has the same OS as you, and you can check that what you get is in fact similar to the distribution as registered in the central DB. That's pretty nifty.
The main problem to solve is how the first MD5 for a module distribution gets generated in the first place. At one point the system has to trust a (priviledged?) user.
The distribution process itself could be made transparent, a-la Inline, the first time you use a module, if it is not installed on your system the system goes out and gets it, already compiled.
The systeme could be name... NAPC (Brian had lots of cool accronyms for it, I liked NAPC Ain;t Perl's CPAN).
| [reply] |
|
| [reply] |
|
Good idea, in general. If I distribute a ZIP or gz or whatever with everything in it, I can provide a matching pgp sig file. But I wonder if it would be a good idea to have sig files for individual .pm files, since those can be checked after the stuff has been installed.
| [reply] |
|
| [reply] |
Re: The Future - Shipping Applications Written in Perl
by mattr (Curate) on Jun 20, 2001 at 15:42 UTC
|
Perhaps another way is to create a disk image?
I was thinking of using vmware, cygwin, beos,
or a mini linux distribution to provide a
completely preconfigured system.
But looking again at Activestate, it's not such a
giant download. If perl2exe doesn't work
it's probably a good idea to just install Perl.
By the way I just noticed something called
PerlApp which "Turns your Perl scripts into executables, so that you can run Perl scripts on
computers without installing Perl." It's in the
ActiveState Perl Dev Kit, which
"makes it easier to build and deploy applications on Windows."
An installer maker
seems (PerlMSI) to be mentioned too. Interested to hear what
these are like.
Updated. | [reply] |
Re: The Future - Shipping Applications Written in Perl
by Abigail (Deacon) on Jun 21, 2001 at 05:02 UTC
|
What is it with this "maintaining a Perl installation"? Why is that a
problem? Perl comes with many operating systems, including most (all?)
Linux distributions, Solaris and HP-UX. And so come hundreds of other
packages. Noone complains about having to maintain networking programs/
libraries and seek for a way to distribute programs like web browsers that
don't require any "network maintenance". Yet configuring a network is
far more complicated than Perl - I will have to answer a few questions
when installing the OS (unlike installing Perl, I'd have to answer a
whopping zero questions).
I refuse to believe that having the attitude of "I think you are stoooooopid;
here's a 5Mb binary instead of 3k source" is going to win us many friends.
Certainly not with the people it matters (like sysadmins, programmers, and
other techies).
Sure, it might be easier for some J. Random Users, but does that matter?
Isn't installation of applications something that should be left to the
system administrators anyway? You don't *want* people who get easily
confused install anything.
That leaves us the non knowledgeable people at home. But they are totally
irrelevant when it comes to increasing the popularity of Perl in the
world. If the customer can install it without caring that it's
written in Perl, it certainly isn't going to increase the popularity
of Perl - because the customer doesn't even know Perl is being used.
Microsoft has done enough damage already with its moronization of the average
computer user. I don't think Perl should go the same way. Let's not insult
the user by assuming (s)he only has two working braincells.
-- Abigail
| [reply] |
|
"I think you are stoooooopid; here's a 5Mb binary..."
The issue isn't intelligence,
it's how much time administrators have available to
wrestle with an installation process
when they're busy doing fifty billion other things.
Make the installation extremely simple
(and reversible) and you increase the
chances that someone will actually install
and use the program. Greatly.
Make it difficult to install, and you
increase the chances that someone along the
chain of command will decide that isn't
worth the hassle.
If the customer can install it without
caring that it's written in Perl,
it certainly isn't going to increase the popularity of Perl
- because the customer doesn't even know Perl is being used.
By this logic, C and C++ must be really, really unpopular.
No customer installing an application written in those
languages knows that C/C++ is being used, after all...
The ability to deliver atomic, easily-installed apps
would increase the popularity of Perl
among the people who write the apps,
not the people who use them.
If a developer with the freedom to do so
is picking an implementation language for an app,
and one language requires delivering a bundle of modules
and maybe getting the installer to do some
other hand-waving,
and the other language has an easy, ready-made way to shrinkwrap
and deliver the app,
that fact could very well sway her away from Perl
if the other (dis-)advantages of the respective languages
balance each other out.
| [reply] |
|
Excuse me? What makes you think a binary program is easier to install than
a text program? The claim wasn't that the installation of the program
is easier (of course it isn't - it's still a program), the claim was
that maintaining the installation of Perl is hard. And that's something
I question. It's as hard as you want it to be.
By this logic, C and C++ must be really, really unpopular. No customer
installing an application written in those languages knows that C/C++
is being used, after all...
Oh, I see! C is so popular because people insist of using programs written
in C! That's it! Yeah, right. The popularity of C doesn't depend on the
number of people installing programs because they are written in C.
The ability to deliver atomic, easily-installed apps would increase
the popularity of Perl among the people who write the apps, not the
people who use them.
Could you please, please tell us what's so frigging hard in installing a
program written in Perl that magically disappears when it's delivered
in a binary format?
-- Abigail
| [reply] |
|
|
The ability to deliver atomic, easily-installed apps would increase the popularity of Perl among the people who write the apps, not the people who use them. If a developer with the freedom to do so is picking an implementation language for an app, and one language requires delivering a bundle of modules and maybe getting the installer to do some other hand-waving, and the other language has an easy, ready-made way to shrinkwrap and deliver the app, that fact could very well sway her away from Perl if the other (dis-)advantages of the respective languages balance each other out.
Exactly. One case at work involved a complex installation that had a master installer that would run other parts. It would have been great to write that in Perl. But, how does one run a Perl program off a CD without "installing" it or the whole Perl system first? Even using a bundling system like PerlApp had a certain amount of risk involved. Instead, we wrote that piece in InstallShield, which easily makes a self-contained single runable file that can be simply run from the CD or other location, and is known to do that well. However, it turned into a terrible mess because the language isn't at all robust or suitable for larger programs. I wanted to use Perl because of Perl the language. I could not deliver a Perl solution because of Perl the system.
—John
| [reply] |
Re: The Future - Shipping Applications Written in Perl
by sierrathedog04 (Hermit) on Jun 22, 2001 at 04:36 UTC
|
I am glad you are looking forward to Perl 6, because I am frightened of it.
A preprocessor that goes through Perl 5 code and generates Perl 6 code that the 6 interpreter can read? How buggy could that be? For the near future Perl's developers will do everything twice -- write the new code, then write routines that convert old versions of Perl to the new one.
No other language that I know of uses such a model. Not the current Perl, nor Visual Basic, C, C++, Java, Oracle PL/SQL, whatever. What if the Perl 6 preprocessing model turns out to be a bad way of writing computer languages?
The idea is supposed to be that you write once, in Perl 5 let's say, and run anywhere, on Perl 6, 7, 8, 9 whatever.
Write once, run anywhere didn't work very well for Java applets. They seemed to break on every new browser/JVM combination. I hope it works better for the new improved Perl.
Maybe I will sit out this next round of Perl improvements. I still only use half the features in Perl 5.x, and I have been coding Perl for a year.
| [reply] |
|
|