We are a relatively young open source project. In November 2015, MetaCPAN will be 5 years old. It's old enough to have become an important and well utilized part of the Perl world, but it's also young enough to have lots of room to evolve. As you will see we have many ideas and encourage more suggestions.
Yep, that's correct. I still remember when I registered the name. It has grown far beyond anything I had imagined.
The whole CPAN ecosystem (CPAN, CPAN Testers, search.cpan.org, metacpan.org etc) involves a lot of people and a lot of resources. It's not just open source software -- it's open source "software as a service". So you get to push some code and also worry about uptime!
Lots of volunteers and more than a few sponsors make sure the ecosystem keeps on ticking. My thanks to all of them. :)
Congratulations! I recall when it debuted and it was a huge accomplishment. 20 years onward and it's still a huge accomplishment, especially testing on so many systems. Thank you to all the maintainers!
Volunteers with lots of different perl versions and OSes run software that monitors CPAN for new uploads, and then automatically downloads them and runs their automated tests, and uploads the results.
Almost every perl module has a set of test scripts that can usually be called up by running make test. This happens by default when installing something with CPAN.pm. The output of this can be captured by CPAN.pm and sent on to a receiving server. Said server can be anything, but in almost all cases is the cpantesters metabase server, which integrates the result into a database which contains and summarizes the results of tests for libraries, by library version, operating system and perl version. In addition to people configuring their CPAN.pm that way and sending reports for everything installed, there are also many people who have set up servers that work on testing the newest version of every library uploaded to CPAN.
CPAN is an awesome tool. First, this is a good way to avoid to reinvent the wheel. Second, it's companion, CpanTesters community platform, gives to the authors a damn simple way to test their modules on a huge variety of OS and architectures. These tests are public and will help people to choose distributions according to their needs and quality exigences. Third, it encourage to test and upload modules at early stages of the development: it makes possible to simplify the development process by retrieving test results, and be sure the modules will be usable on various OS, even if they are quite old or uncommon. It's almost disappointing sometimes how for any task you need to achieve, each time there is an existing module ready to be use.
I think it was the first better done package managers. Saved the problem of installing modules on cross platforms. Most of the time it works without a hiccup. For a perl developer CPAN is a friend.
My experience from a decade ago was different than most here, I had not so much luck with CPAN.
Many libraries and projects, but most of them alpha or abandoned. It took a lot of time to find stuff that was built well enough for production and was still maintained.
What exactly were you looking for? Which libraries did you find that were alpha or abandoned?
It's highly likely that your experience was simply due to the problem domain you were looking at. If i were to look at something i work with, 3d graphics, my results would look much the same as what you said.
I prefer using libaries instead of developing everything on my own, so usually I use 10-20 libraries for a project beyond a web framework, e.g. credit card management, HTTP library,.... YMMV and if a web framework is all you need, hurray to you.
I asked for "What exactly were you looking for? Which libraries did you find that were alpha or abandoned?"
You only said "Web development."
Now you're addressing completely different problem domains, so if you don't like my answer, than that is because your initial answer to my question wasn't very clear. Were my questions unclear?
But sorry. This was more than a decade ago, I've done dozens and dozens of projects since then with Java, C, Ruby, Python, Clojure, Scala, Javascript, Coffescript and Typescript and more, so I can't remember 'exactly' what libaries I was using more than 10 years ago in some Perl projects.
"Now you're addressing completely different"
I beg to differ, in my book credit card processing during e-commerce checkou and accessing backend services with HTTP are in the problem domain of 'web development', but it might be different for your 'web applications'.
I'm not attacking, i'm trying to figure out your case, because i occasionally hear people voicing a sentiment as in your original post, but never with actual detail. I'm just curious and wish to know more about this. :)
And sure, i didn't really expect you to remember what you did find. But while your response of "web development" does include credit card and http stuff, it only does so roughly. Many many web apps don't use either.
CPAN was also created after 1993, hence it being 20 years old :p
I don't know when the Debian package format was first created, but dpkg was rewritten in C back in '94[1], so it would predate CPAN. However the real genius of package managers is dependency resolution and the central software repositories - both of which likely came a little while after dpkg. I'd be interested to read more on the history of Debian's package management though - if anyone does find a reference.
It looks less daunting when you don't make every item look like a replacement for itself. I notice that under Perl you don't list ".tar.gz" ".tgz" ".tar.bz2" and ".tar.xz" in the list of "ways to do it."
Also:
* Wheels are (at least officially) considered the way forward. Support for other formats is legacy. Yes, this is less ideal than keeping a simple package format for 20 some odd years, but Python also really didn't take off in popularity until ~2002 despite being almost as old as Perl. Also, it makes sense to improve the state of things when necessary (e.g. creating wheels vs. sticking with eggs) rather than doing nothing.
* distutils was a fork of setuptools that has since been merged back into setuptools. Counting it twice doesn't speak to the current state of things.
* easy_install is the installation command that is part of the setuptools package, so including it in the list is counting the same thing twice. (I'll notice that you didn't include any CPAN wrappers as "different ways to do it.")
> in Perl : there is really one way to do it, use CPAN.
`easy_install` is not a library per se, it's a binary offered by setuptools.
> distutils was a fork of setuptools
This is incorrect. Setuptools is an extension of distutils (it patches and extends distutils to have additional functionality). Distribute was a fork of Setuptools that has been merged back into Setuptools.
Also, `pth` is not a installation method - it's merely a way to customize the import system. It's a very scary feature as it allows one to execute arbitrary code (that can reside in the `.pth` file) when import paths are being set up (when the `site` module is being initialized).
> `easy_install` is not a library per se, it's a binary offered by setuptools.
I thought that I clarified that in my post, but if you could tell me what was confusing, I'll use that to inform future discussions I have on this.
> This is incorrect. Setuptools is an extension of distutils (it patches and extends distutils to have additional functionality). Distribute was a fork of Setuptools that has been merged back into Setuptools.
Correct, and one reason why the landscape has been confusing for a while (confusion between distutils/setuptools/distribute). Thankfully distribute has been merged back into setuptools.
> Also, `pth` is not a installation method
You're right. It's a way to customize the import system, but it's "main" usage in the wild is during installation/setup. The main place that I've seen it used is with easy_install + eggs (IIRC).
Maybe I can clarify for the down voters because they haven't really responded with anything of substance (e.g. a comment):
* In the Python world, pip replaces/supplants/simplifies away easy_install much in the same way that cpanm/cpanminus made things much easier than the regular cpan command, or even cpanplus (at least in my experience). I feel like listing of "CPAN" as a whole, while breaking out "pip" and "easy_install" is disingenuous in light of this.
* CPAN is just the distribution network (plus all of the meta stuff like search.cpan.org, metacpan, cpantesters, etc). Python also has a single distribution network: The Python Package Index (aka PyPI / "the cheeseshop").
* Talking about distutils/setuptools/distribute is the same as talking about many of the tools that are used to manage Perl packages/modules (I can't recall their names off the top of my head, but there are at least 2 or 3 of them, and they all generate their own Makefiles/etc for doing things). It's possible that these have been simplified away in the last few years (since I've been in Perl-land), but the legacy is still there (much like the legacy of Python's various distribution/packaging setup libraries).
I will admit, that as a whole, I like CPAN better than PyPI, if only for the fact that it's easy to fetch the author/package/etc lists as a gzip-ed text file whereas most tools interacting with PyPI are basically screen-scraping the website (rather than having a simple/easy api).
38 comments
[ 3.1 ms ] story [ 89.5 ms ] threadWe are a relatively young open source project. In November 2015, MetaCPAN will be 5 years old. It's old enough to have become an important and well utilized part of the Perl world, but it's also young enough to have lots of room to evolve. As you will see we have many ideas and encourage more suggestions.
The whole CPAN ecosystem (CPAN, CPAN Testers, search.cpan.org, metacpan.org etc) involves a lot of people and a lot of resources. It's not just open source software -- it's open source "software as a service". So you get to push some code and also worry about uptime!
Lots of volunteers and more than a few sponsors make sure the ecosystem keeps on ticking. My thanks to all of them. :)
I got a lot out of it for years, time to say thanks! You guys in the Perl community were awesome and still are!
A shout out to CTAN too!
For example, i know no (and i may be ignorant) language that has a distributed library testing community.
Here's more on CPANTesters: http://wiki.cpantesters.org/wiki/WhatIsCPANTesters
And here's an example of the results for a popular module: http://matrix.cpantesters.org/?dist=Moose+2.1600
Almost every perl module has a set of test scripts that can usually be called up by running make test. This happens by default when installing something with CPAN.pm. The output of this can be captured by CPAN.pm and sent on to a receiving server. Said server can be anything, but in almost all cases is the cpantesters metabase server, which integrates the result into a database which contains and summarizes the results of tests for libraries, by library version, operating system and perl version. In addition to people configuring their CPAN.pm that way and sending reports for everything installed, there are also many people who have set up servers that work on testing the newest version of every library uploaded to CPAN.
Many libraries and projects, but most of them alpha or abandoned. It took a lot of time to find stuff that was built well enough for production and was still maintained.
It's highly likely that your experience was simply due to the problem domain you were looking at. If i were to look at something i work with, 3d graphics, my results would look much the same as what you said.
That doesn't mean all of CPAN's like that though.
You only said "Web development."
Now you're addressing completely different problem domains, so if you don't like my answer, than that is because your initial answer to my question wasn't very clear. Were my questions unclear?
But sorry. This was more than a decade ago, I've done dozens and dozens of projects since then with Java, C, Ruby, Python, Clojure, Scala, Javascript, Coffescript and Typescript and more, so I can't remember 'exactly' what libaries I was using more than 10 years ago in some Perl projects.
"Now you're addressing completely different"
I beg to differ, in my book credit card processing during e-commerce checkou and accessing backend services with HTTP are in the problem domain of 'web development', but it might be different for your 'web applications'.
And sure, i didn't really expect you to remember what you did find. But while your response of "web development" does include credit card and http stuff, it only does so roughly. Many many web apps don't use either.
That said, at that time both LWP and Business::CreditCard were in what looks like sensible states: https://metacpan.org/release/GAAS/libwww-perl-5.803 https://metacpan.org/release/IVAN/Business-CreditCard-0.28
Did the search interface at the time not surface them for you, or were they incompatible with what you were trying to do?
Wow, I would never want to work with someone as bossy as you, sir.
I did some digging and it seems that RPM, DEB etc were created after 1993 so perhaps CPAN could be father of packaging formats.
I don't know when the Debian package format was first created, but dpkg was rewritten in C back in '94[1], so it would predate CPAN. However the real genius of package managers is dependency resolution and the central software repositories - both of which likely came a little while after dpkg. I'd be interested to read more on the history of Debian's package management though - if anyone does find a reference.
[1] https://anonscm.debian.org/cgit/dpkg/dpkg.git/plain/main/mai...
in Perl : there is really one way to do it, use CPAN.
in Python : there's more than one way to do it : pth, eggs, setuptools, pip, wheel, distutils, easy_install,...
http://lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere/
> pip, wheel
Package formats: egg, wheel
Packaging/Install libraries: setuptools (incl. easy_install), pip, distutils
Install method: pth
It looks less daunting when you don't make every item look like a replacement for itself. I notice that under Perl you don't list ".tar.gz" ".tgz" ".tar.bz2" and ".tar.xz" in the list of "ways to do it."
Also:
* Wheels are (at least officially) considered the way forward. Support for other formats is legacy. Yes, this is less ideal than keeping a simple package format for 20 some odd years, but Python also really didn't take off in popularity until ~2002 despite being almost as old as Perl. Also, it makes sense to improve the state of things when necessary (e.g. creating wheels vs. sticking with eggs) rather than doing nothing.
* distutils was a fork of setuptools that has since been merged back into setuptools. Counting it twice doesn't speak to the current state of things.
* easy_install is the installation command that is part of the setuptools package, so including it in the list is counting the same thing twice. (I'll notice that you didn't include any CPAN wrappers as "different ways to do it.")
> in Perl : there is really one way to do it, use CPAN.
http://search.cpan.org/~miyagawa/App-cpanminus-1.7039/bin/cp...
https://github.com/chromatic/CPAN-Dark
http://search.cpan.org/~jhthorsen/App-git-ship-0.19/lib/App/...
http://www.perlmonks.org/?node_id=1028999
http://search.cpan.org/~sunnavy/Shipwright-2.4.41/lib/Shipwr...
http://perlbrew.pl/
> distutils was a fork of setuptools
This is incorrect. Setuptools is an extension of distutils (it patches and extends distutils to have additional functionality). Distribute was a fork of Setuptools that has been merged back into Setuptools.
Also, `pth` is not a installation method - it's merely a way to customize the import system. It's a very scary feature as it allows one to execute arbitrary code (that can reside in the `.pth` file) when import paths are being set up (when the `site` module is being initialized).
I thought that I clarified that in my post, but if you could tell me what was confusing, I'll use that to inform future discussions I have on this.
> This is incorrect. Setuptools is an extension of distutils (it patches and extends distutils to have additional functionality). Distribute was a fork of Setuptools that has been merged back into Setuptools.
Correct, and one reason why the landscape has been confusing for a while (confusion between distutils/setuptools/distribute). Thankfully distribute has been merged back into setuptools.
> Also, `pth` is not a installation method
You're right. It's a way to customize the import system, but it's "main" usage in the wild is during installation/setup. The main place that I've seen it used is with easy_install + eggs (IIRC).
* In the Python world, pip replaces/supplants/simplifies away easy_install much in the same way that cpanm/cpanminus made things much easier than the regular cpan command, or even cpanplus (at least in my experience). I feel like listing of "CPAN" as a whole, while breaking out "pip" and "easy_install" is disingenuous in light of this.
* CPAN is just the distribution network (plus all of the meta stuff like search.cpan.org, metacpan, cpantesters, etc). Python also has a single distribution network: The Python Package Index (aka PyPI / "the cheeseshop").
* Talking about distutils/setuptools/distribute is the same as talking about many of the tools that are used to manage Perl packages/modules (I can't recall their names off the top of my head, but there are at least 2 or 3 of them, and they all generate their own Makefiles/etc for doing things). It's possible that these have been simplified away in the last few years (since I've been in Perl-land), but the legacy is still there (much like the legacy of Python's various distribution/packaging setup libraries).
I will admit, that as a whole, I like CPAN better than PyPI, if only for the fact that it's easy to fetch the author/package/etc lists as a gzip-ed text file whereas most tools interacting with PyPI are basically screen-scraping the website (rather than having a simple/easy api).