Release notes for Puppy Linux version 3.01

The live-CD iso file is 'puppy-3.01-seamonkey.iso' and is 98.6MB. There is also a "retro" live-CD, 'puppy-3.01retro-k2.6.18.1-seamonkey.iso' that is the same except uses an older kernel -- it is also smaller, at 94.8MB.

This time I have not created a detailed release-notes page, instead, for further information please go to my Developer News Blog:

Puppy 3.01 is a bug-fix upgrade of 3.00. Please read the above Blog link for details. If you are currently using 3.00 (or have tried to use 3.00 and have encountered a show-stopper bug!), please read the Blog first to find out if your particular problem has been addressed -- if not, it may be addressed in 3.02. The purpose of 3.01 is simply to fix the most urgent bugs and niggles in 3.00, not apply any major changes or package upgrades.

This Puppy (3.00 and 3.01) is a massive upgrade from the previous (v2.17.1). I decided to aim for close binary compatibility with Slackware 12, with the objective of being able to install Slackware packages and have all or most of the required dependencies already in place. To that end, I used all the building block packages from Slackware 12, such as glibc 2.5, gcc 4.1.2 and gtk 2.10.13. Most of the libraries in Puppy are now from Slackware. Note, though, this does not in any way make Puppy a clone of Slackware -- apart from aiming for binary compatibility, Puppy is fundamentally unique from the foundations upward.

Another major thing that I have done is totally rewritten the key scripts that control how Puppy boots up, is configured, and shuts down. This covers such things as pup_save file custom naming, frugal install into a subdirectory, pup_save file resizing and correct recognition of multiple pup_save files at bootup.

Then there are some major breakthroughs, such as finally getting periodic flushing of RAM to Flash drive working properly -- this is part of a mechanism that constrains writes to Flash drives so that they don't burn out.

Release notes (summary):
I have shown some authors and contributors above (forum-member names, in brackets), however this is far from a complete list. My Developer Blog acknowledges more contributors.

True flushing to Flash drive. If you install Puppy to a USB Flash drive, Puppy will run in RAM and save periodically (every 30 minutes) to the 'pup_save' file. This batch saving is to limit writes and thus prolong the life of the Flash drive. The saving is copy-down meaning that the RAM does not get flushed -- so if you have a PC with say only 128MB RAM, no swap partition or swap file, and say a 512MB 'pup_save' file, you can only fill up the free RAM space, then you have to reboot -- at shutdown the RAM is flushed to the 'pup_save'. The free space is shown in the taskbar so you will always know when space is running low.
However, Puppy 3.00 and 3.01 have something new. PETget, the PET package manager installs packages direct to the 'pup_save' file, not into RAM. Thus, you can install big packages and they will not chew up RAM space and you won't have to reboot.
Other package installation systems (such as for DotPup packages) do not yet have this feature.

Note, kirk is developing a Gslapt package manager package for Puppy, see this link: This is also supporting direct flushing to Flash drive. You are welcome to experiment with this package and help kirk with its development.

Boot parameters. The 'init' script should now correctly handle the boot parameters 'psubdir', 'pdev1'.
The 'init' bootup script now has rigorous handling of 'psubdir', so a frugal install of vmlinuz, initrd.gz, pup_301.sfs and zdrv_301.sfs in a folder, say 'puppy301', will be recognised. Puppy will automatically search partitions one-deep, however the 'psubdir=puppy301' boot parameter can be given to prevent Puppy from searching anywhere else. I have updated the Universal Installer to offer to install to a folder when doing a frugal install. I also modified the shutdown script rc.shutdown so that it recognises that Puppy has booted from a folder and on first shutdown will create the pup_save.2fs file (personal storage file) in that folder.
These are all optional. you use them to narrow down the search as much as you want. for example, booting from a usb flash drive, use 'pmedia=usbflash' so that puppy won't waste time probing the cd drives and other drives (CD probing especially is slow). Or, for a frugal ide hd install, use 'psubdir=puppy301 pmedia=idehd' so that puppy will only probe the ide hd's and will only search inside folder 'puppy301' -- this is particularly good for multiple frugal installations that want to keep themselves apart.

This is all good news for those who like to have multiple Puppy installations in their PC. More examples:
pmedia=usbflash #choices: usbflash|usbhd|usbcd|ideflash|idehd|idecd|idezip|satacd|satahd|scsihd|scsicd|cd
pdev1=hda7         #partition puppy is installed on.
psubdir=pup301   #folder containing all the puppy files. even pup_save.2fs will be here.

initrd.gz cpio archive. The 'initrd' file no longer has a filesystem inside it, so cannot be mounted with a loop device. It is now a cpio archive, so has to be extracted something like this:
# gunzip initrd.gz
# mkdir puppy-init
# cd puppy-init
# cat ../initrd | cpio -d -i
To go the other way, that is, to create a initrd.gz file:
# cd puppy-init
# find . | cpio -o -H newc | gzip -9 > ../initrd.gz
"Retro" Puppy. Puppy 2.16 (and earlier) uses the kernel. Puppy 2.17 uses the kernel, whereas Puppy 3.00 and 3.01 use the kernel. The problem is that the kernel underwent major structural changes between the 2.6.18.x and 2.6.21.x series and some people find that Puppy will not boot (or had other hardware-related issues) with the later series. Well, a couple of people anyway. Although this is a small group, I decided to support them by offering the latest Puppy but with the older kernel.

Puppy 3.00retro and 3.01retro have exactly the same kernel used in Puppy 2.16.1 and earlier, thus any extra modules compiled for those puppies will work.

Warning: be careful with mixing the normal and retro puppies. The 'zdrv_301.sfs' and 'pup_301.sfs' files have the same name for both puppies. This is an issue if these files are located anywhere on the hard drive where Puppy might find the wrong one at bootup. Note, in future I might make the retro a different version number to avoid this potential clash.

Note: for 3.02 I plan to use the kernel for the retro, and recompile it with gcc 4.1.2. The old kernel was compiled with an earlier gcc, which means that modules cannot be compiled for that kernel in Puppy 3.00 and 3.01. Also, the old kernel has an old version of Unionfs driver that does not support the true flushing to Flash drives.

Upgrading from earlier version of Puppy. No problem. If you run Puppy from live-CD, just boot the new CD and Puppy will automatically perform any required upgrading of your personal storage file/partition (usually pup_save.2fs file).
For USB or frugal-hd installations, just copy the latest files (vmlinuz, initrd.gz, pup_301.sfs and zdrv_301.sfs) to the USB or hd boot media.

Download. If you want to obtain the latest Puppy live-CD, or the "devx" module, that turns Puppy into a complete C/C++ compiler environment, or the patched kernel source, please go to the Puppy download page for links:

Note, file 'devx_301.sfs' is what we call a SFS module, which is a "combo-pack" of applications in a single file. It can be loaded at bootup and you instantly have all the apps "installed". Or, not load it at bootup and all the apps are immediately "uninstalled". Normally, you just download a SFS file to /mnt/home then reboot Puppy, and it automatically loads. Note: it is reported on the Puppy Forum that SLAX .mo modules work with Puppy -- just rename the '.mo' file extension to '.sfs' -- no guarantees though!

A note on the kernel source: If you want to compile a module, or a package that needs to reference the kernel source, we have the kernel source available as an SFS file. Download 'devx_301.sfs' and 'kernel_301.sfs' to /mnt/home then reboot Puppy and you're in business (that's how simple SFS files are to use, but note you can manage loading of SFS files by running the BootManager (System menu)). Get the official SFS files from here:

History. To get a better sense of how Puppy has evolved, it is helpful to read the release notes for earlier versions.
Puppy v2.17:
Puppy v2.16:
Puppy v2.14:
Puppy v2.13:
Puppy v2.12:
Puppy v2.11:

Best regards,
Barry Kauler and the Puppy Team
October 2007