The Very First iPhone Package Manager

Before Cydia, Before even INSTALLER, was the PXL project. Started in August of 2007, basically as soon as a compiler was created for the iPhone (which Apple wasn't even the first to release to the public) this was in development and actively released. Think about that, Apple had not released a public compiler, SDK, or even the iTunes Store app (let alone the AppStore) before the PXL project had it's first release.

The earliest mention of PXL that I can find online is from 8/13/2007. At the time the current iPhone firmware version was 1.0.1. Not even the iPod Touch was released yet.

So into how this works. It's quite simple. People had been hacking the iPhone before even the first ever software update (1.0.1) due to nightwatch's legendary restore mode exploit released as the first ever jailbreak on July 9th 2007. This exploit allowed you to modify fstab and mount /dev/disk0s1 as read write. At the time, all you could do was add some Ringtones to your device as there was no compiler in existence for arm/mach-o/iphone. Nightwatch soon wrote an entire llvm compiler so you could run unsigned code by July 19th 2007, since you didn't need to even sign code back then. Everything, even Apple's code, was unsigned.

So in July of 07 you could run your own compiled code, but it was very much the wild wild west for installing said code. Think back to 2007, the AppStore didn't exist, and most people were used to downloading software by googling it and finding the software's web page. But how would this be accompilished on the iPhone, with a Mobile version of Safari that couldn't even download files (and would remain not able to download all types till 2019 in iOS 13)?

Instead, there was plenty of tutorials of how to use NightWatch's iPhone hack to install binaries manually using Restore Mode with iPHUC. From a UX perspective, this sucked. So many people who would later become AppTapp Team in a future joint venture teamed up to use these brand new compilers and hacks to create a package manager for the iPhone.

Package managers at the time were really only known about by linux users. Windows didn't have anything like one for a long time, and Mac OS X didn't see one till Snow Leopard (2009). Package managers however made so much sense in 2007 for the iPhone. Who wants to manually install all your binaries in Restore Mode?

LibXML2 was already availble in the iPhone 1.0 software, and the PXL team (there was never an official name for this project's authors as it lasted like 2 months at most) saw this as the way forward. A plist formated native macho arm package manager that used a computer to install packages.

It was really something like nothing else. The idea was you go to some website on your Mac or PC, download these .pxl files, connect your iPhone via a USB Dock cable to the computer, then open the .pxl files in a Windows program or Mac App. The App or program then transfers the PXL file and a specific plist to the iPhone using a reversed MobileDevice header (pretending to be iTunes basically) to the iPhone. The iPhone with the PXLdaemon program already installed, reads this special plist which tells it what to do with the pxl file. This could be installing it, uninstalling it, upgrading it, etc.

This is what PxlPickup could be:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>commands</key>
	<array>
		<dict>
			<key>command</key>
			<string>install</string>
			<key>package</key>
			<string>15-1.1.1b.pxl</string>
		</dict>
	</array>
</dict>
</plist>

So lets break it down in a more technical way:

A .pxl is just a renamed .zip. Very much like any .IPSW file from Apple.

Inside the .pxl file will be a PxlPkg.plist file, which contains information on how to install, uninstall, upgrade, etc., the package.

Here's an example of that PxlPkg.plist file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
	<string>net.metaatem.15_puzzle</string>
	<key>RDPxlPackageFiles</key>
	<array>
		<dict>
			<key>destination</key>
			<string>/Applications/15.app</string>
			<key>overwrite</key>
			<true/>
			<key>permanent</key>
			<false/>
			<key>source</key>
			<string>app</string>
		</dict>
	</array>
	<key>RDPxlPackageDesc</key>
	<string>A twisted sliding puzzle. Rotate and tip your iPhone to get the tiles back into order.</string>
	<key>RDPxlPackageURL</key>
	<string>http://15.metaatem.net/</string>
	<key>RDPxlPackageFormat</key>
	<integer>1</integer>
	<key>RDPxlPackageIcon</key>
	<string>app/icon.png</string>
	<key>RDPxlPackageName</key>
	<string>15</string>
	<key>RDPxlPackageVersion</key>
	<string>1.1.1b</string>
	<key>RDPxlPackagerName</key>
	<string>extremis</string>
	<key>RDPxlPackagerContact</key>
	<string>extremis@exploit.org</string>
</dict>
</plist>

The PXL format is pretty advanced for being a completely new quickly put together format. It automatically knows how to uninstall PXLs by a data base of what it installed.

So what happened to the PXL project? When the PXL dev team first created PXL, there probably wasn't any GUI apps available. The first open source GUI App for iPhone was released on July 19th 2007 by NightWatch, basically a showcase of his awesome toolchain he created after exploiting Restore Mode, the first iPhone exploit. NullRiver and PXL basically merged to create a UiKit App called Installer.app which became the default package manager until around the iPhone OS 2.0 public release. After the iPhone OS 2.0 public release a lot of work had to be done to support iPhone OS 2.0. Cydia soon supported iPhone OS 2.0 more then Installer and people just began switching to Cydia. It had more support, more software, and seemed more easier to learn repository wise.

PXL's lived on up until 2008 when the main PXL site's said they would be closing down. You see, PXL was programmed in such a way that even through firmware 1.0-1.1.5 it still worked perfectly. This is amazing to me. The last update was in Augaust 2007 yet this PXL package management is working perfeclty in July 2008 on iPod Touch 1.1.5. A lot of sites were asking for someone else to hold the candle, a.k.a take over operations. I'm extremley glad that these sites archived just about every .pxl file so I can continue the legacy as the only .pxl website in existence.

So in the end, PXL was cannibalized by it's own developers in Installer.app. Why continue developing a daemon based program when you can have a UiKit app? A lot of simularties were present between the 2, espically since you can now view Installer v3's source code. Although Installer 3's source was released just recently, PXL's source has been availble since the first release in Augaust 2007.

PXL still has a place, there were so many packages made in it's prime. And it turns out with some simple modifications it could work on iPhone OS 1.2 beta-2.0 beta 3. Which is exactly what I did. ZiPhone installs the PXL daemon for any version it can jailbreak. PXL became the first public package manager for iPhone OS 1.2 beta-2.0 beta 3 just this year in 2019 with the release of an updated ZiPhone.