In our previous article, we took an in-depth look at ActivePerl.

ActivePerl is a way of installing a Perl environment under Windows. Perl is the underlaying programming language that our MIDAS software is written in.

In essence, we felt we could no longer recommend ActivePerl to customers looking to install a self-hosted room booking system on their Windows servers.

Well, ActiveState (the developers of ActivePerl) took notice of our original article and have quickly reached out to us…

ActivePerl Icon

ActiveState’s Response

Pete Garcin, Director of Product at ActiveState reached out to us:

I saw your blog post about revisiting ActivePerl — it was great to see the engagement you had with the platform and the process you went through trying to get your build to work. It’s unfortunate that you ran into issues during that process though!

One of the goals of the platform is to provide a simple, reproducible process for generating builds from an expansive catalog. While it’s not always possible to keep 100% of the catalog building 100% of the time, we do our best to keep critical packages running.

Since the time you attempted your build, DBD::MySql and the maria-db-connector have been fixed (they were transiently broken) and one of our build engineers bumped the timestamp on your project so that now all of your projects for later versions should work. If you use 5.32 or newer, it ships with the mysql client DLL by default! In the future, making any change to a project will move the timestamp forward so that you pick up new changes to the catalog.

Also, you are free to use 5.32.1 or 5.34.0 — as both are now classified as out of beta (website might lag behind slightly). In fact, we highly recommend using one of the newer versions as the build experience is much faster and they also include the mysql DLL.

Also, if you’re distributing to your end users, our CLI provides a super simple way for anyone to set up the environment without needing to distribute a full installer — and they can also receive updates and stay sync’d. For modern versions of Perl (5.32+) you’ll see the instructions on how to install the CLI and the build on the platform dashboard in the Downloads tab.

Again — sorry to hear you had a rough experience creating your build, we’d love for you to try again with the updated projects and always happy to help work through any issues with you! Feel free to reach out any time.

– Pete Garcin, Director of Product, ActiveState

ActiveState’s CTO, Scott Robertson, also reached out:

Thanks for the amazing write up, really sorry you had a bad first impression. Even though ultimately we didn’t win you on the first shot I took heart that you’re starting to see the vision to our ambition when you say “We admit, we were actually a little excited – we appeared to have a custom Windows distribution of..”.. That’s the goal!

You’ve noted the number of packages we now support is over 100k! We’re coming pretty close to our goal now of being able to build 100% of CPAN in a secure reproducible way including all native dependencies. Something Strawberry perl can not claim. Unfortunately we’re still experiencing some growing pains going from 500 packages to over 100k and supporting every version the night it’s dropped. Looks like when you tried this project MariaDB updates entered our catalog and were broken. We have since fixed them. The post you found in our community forum was way out of date. We’re working on producing better support materials, but in the meantime know we’re here to help.

– Scott Robertson, CTO, ActiveState

Analysis

First of all, we have to give credit to ActiveState for reaching out to us so quickly. We certainly weren’t expecting that, but it’s encouraging to see their engagement.

Secondly, it would appear – at first glance – that ActivePerl 5.32 and 5.34 do now successfully build on the ActiveState platform.

So let’s take a look…

Missing stand-alone installers

Here’s what the “Download Builds” tab on the ActiveState platform looks like for our ActivePerl 5.28.3 build:

.exe and .msi Windows installers are available for ActivePerl 5.28.3
.exe and .msi Windows installers are available for ActivePerl 5.28.3

Notice that there are two install methods offered; “Download Installer” and “Install via Command Line”.

The “Download Installer” section contains download links for standalone Windows installers for our ActivePerl 5.28.3 build.

The “Install via Command Line” section allows the build to be installed from the command line. This is achieved by using Windows PowerShell and ActiveState’s “State Tool“.

Now, let’s be realistic; the average non-tech savvy user will always prefer a familiar Windows Installer over having to use Windows PowerShell to execute arbitrary commands.

So it’s strange and very disappointing that no stand-alone installers appear to be provided for our 5.32/5.34 builds:

No stand-alone installers for Windows are provided for ActivePerl 5.34
No stand-alone installers for Windows are provided for ActivePerl 5.34

Thinking this may be a glitch, we triggered a re-build of our ActivePerl 5.34 package on the ActiveState platform. This appeared to successfully build, but again no standalone Windows installers were generated.

We questioned this with ActiveState’s CTO who told us:

Installers vs State tool: It will be State tool only going forward for free versions. The service and command client is meant for developers. Installers are a paid option.

Scott Robertson, CTO, ActiveState

This is clearly a very recent decision which isn’t made clear on their website. In fact, the automated email notification the platform sent us when the re-building of 5.34 was complete, still asserts that you can “download the installer”:

Email notification from ActiveState indicating that a stand-alone installer is available
Email notification from ActiveState indicating that a stand-alone installer is available

Sadly, the lack of any standalone .exe/.msi installers for ActivePerl being made freely available going forward is a major block for us to recommence recommending ActivePerl again to our self-hosted MIDAS customers.

However, we were still curious ourselves as to whether the previous issues with lack of MySQL/MariaDB support had indeed been fixed in this 5.34 build. So we decided to try a test install using Windows PowerShell to install ActivePerl’s “State Tool” and configure our 5.34 build.

Here’s how we got on:

Installing via Windows PowerShell

We opened a Windows command prompt and then pasted in the command ActiveState provided to “Install via Command Line”.

The result was a spiel of console output that would baffle most:

Console output from installing ActivePerl via the command line
Console output from installing ActivePerl via the command line

…to be honest, we’re not even sure if we understand all of that… and we’re seasoned Perl developers!

Anyway, the console output ended by informing us that we were “Activated”.

So Perl 5.34 was now installed… right?(!)

We weren’t sure. So to test, we created a very simple .pl script that would print the words “Hello World!” in the browser. We saved this file into our test Apache web server’s htdocs folder.

This very simple .pl script contained just two lines:

#!/usr/bin/perl

print "content-type:text/html\n\nHello World!";

Trying to locate Perl

Now, let’s talk shebangs (no, not the 2000 hit by Ricky Martin!).

In Perl, the “shebang” refers to the very first line of any Perl script. It informs the web server as to the whereabouts of the perl installation to use.

On Linux servers, Perl may typically be located at /usr/bin/perl, therefore, the first line of any Perl script (known as the “shebang” line) should read:

#!/usr/bin/perl

On Windows servers, Perl was traditionally located at C:\Perl\bin, C:\Perl64\bin, or C:\Strawberry\perl\bin, and so the shebang could read something like:

#!C:\Strawberry\perl\bin\perl.exe

However, Apache servers support a really cool configuration option called “ScriptInterpreterSource Registry“. What this does is instruct Apache to simply ignore the “shebang” line. Instead, Apache will determine the location of Perl based upon a Windows registry value (which should be set when Perl is installed).

That has the advantage that user’s don’t then need to set/change, or indeed care about the “shebang” line in Perl scripts, they should just work regardless!

That’s why we recommend enabling this config option when installing and configuring Apache on a Windows server.

So we tried accessing our simple “hello world” Perl script in our browser. This resulted in an Internal Server Error:

Internal Server Error when executing a .pl script
Internal Server Error when executing a .pl script

Upon investigation, it would appear that during install of ActivePerl, no registry value was set to allow Apache’s “ScriptInterpreterSource” directive to determine where Perl was located.

So we then had to find the location of the perl.exe executable on our test server and manually update the shebang line of our “hello world” script.

There was no obvious C:\Perl, or C:\Perl64 or even C:\ActivePerl directories present. We had to search the entire C:\ drive on our test server for “perl.exe”, and we eventually found it under:

C:\users\wdagutilityaccount\appdata\local\activestate\052e8766\bin\perl.exe

So the “shebang” line we needed to add to our “hello world” perl script was the instantly forgettable(!): #!C:\users\wdagutilityaccount\appdata\local\activestate\052e8766\bin\perl.exe

Anyway, this at least allowed our hello world script to execute and correctly print “Hello World” to the browser.

The next stage was to try running our Server Readiness Tool.

Running our Server Readiness Tool

Our Server Readiness Tool is a perl script that our customers can freely download and access (via their browser). The tool checks that their server is correctly configured in order to install MIDAS.

As part of these checks, the tool identifies any missing Perl modules which MIDAS requires.

To our surprise, running this tool indicated a number of missing modules, which we thought had been included in our custom ActivePerl build:

Perl modules apparently "missing"
Perl modules apparently “missing”

We double-checked back on the ActiveState platform. Sure enough these modules appear to have been successfully included in our build:

DBD::MariaDb and DBD::mysql appear to have been included in the build
DBD::MariaDb and DBD::mysql appear to have been included in the build

So what was going on?

Digging a little deeper in Apache’s error logs revealed the following errors:

Can't load 'C:/Users/wdagutilityaccount/AppData/Local/activestate/052e8766/site/lib/auto/DBD/mysql/mysql.dll' for module DBD::mysql: load_file:The specified module could not be found at C:/Users/wdagutilityaccount/AppData/Local/activestate/052e8766/lib/DynaLoader.pm line 193.\r: C:/Apache24/htdocs/servercheck.pl

Can't load 'C:/Users/wdagutilityaccount/AppData/Local/activestate/052e8766/site/lib/auto/DBD/MariaDB/MariaDB.dll' for module DBD::MariaDB: load_file:The specified module could not be found at C:/Users/wdagutilityaccount/AppData/Local/activestate/052e8766/lib/DynaLoader.pm line 193.\r: C:/Apache24/htdocs/servercheck.pl

Can't load 'C:/Users/wdagutilityaccount/AppData/Local/activestate/052e8766/site/lib/auto/Net/SSLeay/SSLeay.dll' for module Net::SSLeay: load_file:The specified module could not be found at C:/Users/wdagutilityaccount/AppData/Local/activestate/052e8766/lib/DynaLoader.pm line 193.\r: C:/Apache24/htdocs/servercheck.pl

We checked, and verified that “mysql.dll”, “MariaDB.dll” and “SSLeay.dll” files were all present at the locations indicated.

Digging into line 193 of “DynaLoader.pm”, this section of code included the comment “Many dynamic extension loading problems will appear to come from this section of the code … often these errors are actually occurring in the initialisation C code of the extension XS file. Perl reports the error as being in this perl code simply because this was the last perl code it executed“.

So whilst ActivePerl appears to have technically installed the modules as part of the installation process, right now they’re broken and don’t work on Windows under ActivePerl 5.34!

…and the previous “workaround” of grabbing the “libmysql__.dll” file from a Strawberry perl installation and placing that within the ActivePerl installation also didn’t resolve the issue.

Once again, we have a broken and unusable ActivePerl installation.

In conclusion…

ActiveState’s prompt engagement with us is very welcome and demonstrates that there is still at least some interest there with regards to Perl.

However, we’re sad that they still don’t have an up-to-date version of perl for Windows users that works with MySQL/MariaDB.

It was extremely disappointing when ActiveState abandoned their popular free “Community Edition”.

That disappointment has been further compounded now by the knowledge that ActiveState have made the commercial decision going forward to discontinue being able to build Windows .exe/.msi standalone installers. That is, unless you pay.

This makes ActivePerl a far less attractive option to us.

Why would we want to spend thousands of dollars a year in order to “build” a user-friendly ActivePerl Windows installer for our self-hosted customers to use, when our customers can simply grab and use Strawberry Perl’s Windows installer for free? Plus, in doing so end up with a Perl installation that actually works on Windows!

Even if a tech-savvy customer was willing to go down the route of installing ActivePerl on their Windows server via the command line script – as things stand right now, they would have a broken installation that wasn’t capable of interacting with a MySQL/MariaDB database. Therefore, they wouldn’t be able to install and run a self-hosted MIDAS booking system.

Now, if ActiveState are committed to resolving these issues, then we’d be happy to take another look. However, for us to be won over, ActiveState would also have to reconsider the decision to put standalone Windows installers behind a paywall!

Right now, we can’t see how we can continue to recommend ActivePerl to our Windows-based customers. This is with a heavy heart, as for years we’d been big advocates of ActivePerl.

For any prospective customers who are interested in MIDAS and considering a self-hosted installation in a Windows environment, we recommend installing Strawberry Perl. Alternatively, you could consider our no-hassle cloud-hosted offering instead.