Allison Randall from O’Reilly spoke about Parrot at last week’s San Francisco PHP meetup. Parrot is a pretty interesting project, whose goal is to build a unified virtual machine for scripting languages.
Wait, another virtual machine? Is there a world shortage of virtual machines, not satisfied by .NET and Java? Well, yeah. The current lifecycle of a scripted app involves passing the scripted PHP/Python/Perl/Ruby code to interpreter, which then sits between the scripted file and the OS layer. For each new hardware platform you’d have to port the proper interpreter. Parrot attempts to define a set of opcodes that are portable to specific hardware platforms. All the scripts within Parrot would be compiled to Parrot bytecode. It’s also a register-based virtual machine, not stack-based, which supposedly will offer some sweet benefits in the future, such as not having to worry about stack overflow when designing a security model for a new language.
You can get the current trunk of Parrot from their SVN repository, but they’re still a few months away from 1.0.
svn co https://svn.perl.org/parrot/trunk parrot cd parrot perl Configure.pl make make test make html
They also support multiple languages by now, including PIPP – PIPP is Parrot’s PHP.

What about LLVM?
LLVM is a very nice *low-level* virtual machine/compiler infrastructure, but its goals do not overlap with Parrot’s. LLVM bytecode is designed to be similar to real hardware such that it can be translated and run efficiently and be used as a basis for compiler development.
Parrot, by contrast, has features to make dynamic language implementation easier. These features are those commonly used in languages like Perl, PHP, Ruby, etc. For example, Parrot provides support for closures, objects, and garbage collection.
Parrot is still in development, but shows great promise.