||This article possibly contains original research. (August 2009)|
A portable application (portable app), sometimes also called standalone, is a program designed to run on a compatible computer without being installed in a way that modifies the computer's configuration information. This type of application can be stored on any storage device, including internal mass storage and external storage such as USB drives and floppy disks – storing its program files and any configuration information and data on the storage medium alone. If no configuration information is required a portable program can be run from read-only storage such as CD-ROMs and DVD-ROMs. Some applications are available in both installable and portable versions.
Like any application, portable applications must be compatible with the computer system hardware and operating system.
Depending on the operating system, portability is more or less complex to implement; to operating systems such as AmigaOS, all applications are by definition portable. Portable apps are distinct from software portability, source code written to be compilable into different executable programs for different computing platforms.
Portable Windows applications
A portable application does not leave its files or settings on the host computer, which may be convenient or required if you have no administrator privileges on a computer. Typically the application does not write to the Windows registry or store its configuration files (such as an INI file) in the user's profile; instead, it stores its configuration files in the program's directory. Another requirement, since file paths will often differ on changing computers due to variation in Windows drive letter assignments, is the need for applications to store them in a relative format. While some applications have options to support this behavior, many programs are not designed to do this. A common technique for such programs is the use of a launcher program to copy necessary settings and files to the host computer when the application starts and move them back to the application's directory when it closes.
An alternative strategy for achieving application portability within Windows, without requiring application source code changes, is application virtualization: An application is "sequenced" or "packaged" against a runtime layer that transparently intercepts its file system and registry calls, then redirects these to other persistent storage without the application's knowledge. This approach leaves the application itself unchanged, yet portable.
The same approach is used for individual application components: run-time libraries, COM components or ActiveX, not only for the entire application. As a result, when individual components are ported in such manner they are able to be: integrated into original portable applications, repeatedly instantiated (virtually installed) with different configurations/settings on the same operating system (OS) without mutual conflicts. As the ported components do not affect the OS-protected related entities (registry and files), the components will not require administrative privileges for installation and management.
Microsoft saw the need for an application-specific registry for its Windows operating system as far back as 2005. It eventually incorporated some of this technology, using the techniques mentioned above, via its Application Compatibility Database  using its Detours  code library, into Windows XP. It did not, however, make any of this technology available via one of its system APIs.
Portability on Linux and UNIX-like systems
Programs written with a Unix-like base in mind often do not make any assumptions. Whereas many Windows programs assume the user is an administrator—something very prevalent in the days of Windows 95/98/ME (and to some degree in Windows XP/2000, though not in Windows Vista or Windows 7)—such would quickly result in "Permission denied" errors in Unix-like environments since users will be in an unprivileged state much more often. Programs are therefore generally designed around using the
HOME environment variable to store settings (e.g.
$HOME/.w3m for the w3m browser). The dynamic linker provides an environment variable
LD_LIBRARY_PATH that programs can use to load libraries from non-standard directories. Assuming
/mnt contains the portable programs and configuration, a command line may look like:
HOME=/mnt/home/user LD_LIBRARY_PATH=/mnt/usr/lib /mnt/usr/bin/w3m www.example.com
A Linux application without need for a user-interaction (e.g. adapting a script or environment variable) on varying directory paths can be achieved with the GCC Linker option $ORIGIN which allows a relative library search path.
Not all programs honor this – some completely ignore $HOME and instead do a user look-up in
/etc/passwd to find the home directory, therefore thwarting portability.
Portable cross-platform applications
Cross-platform portability of applications can be achieved using an abstraction layer. The first well-known one was the Java programming language. One project which focuses on the Java platform is called jPort  and is accessible from the jPort web site. The main goal was to provide free applications written in Java using a Java-enabled application launcher. The concept is based on the assumption that the host system already runs Java Virtual Machine.
- Comparison of application launchers
- Application virtualization
- Windows To Go
- List of portable software
- Live USB
- Platform virtualization software
- Portable application creators
- Spoon (software)
- VMware ThinApp
- Virtual appliance
- "Portable Application Conversion Technology". Sphinx Software. Archived from the original on September 7, 2010. Retrieved January 19, 2012.
- "Portable Application Registry". ip.com. Retrieved January 19, 2012.
- Ionescu, Alex. "Secrets of the Application Compatilibity Database (SDB) – Part 1". Retrieved January 19, 2012.
- "Detours". Microsoft Research. Retrieved January 19, 2012.
- Hustvedt, Eskild (2009-02-08). "Our new way to meet the LGPL". Archived from the original on 2009-02-20. Retrieved 2011-03-09.
You can use a special keyword $ORIGIN to say ‘relative to the actual location of the executable’. Suddenly we found we could use -rpath $ORIGIN/lib and it worked. The game was loading the correct libraries, and so was stable and portable, but was also now completely in the spirit of the LGPL as well as the letter!
- Vining, Nicholas (2010-10-13). "Dear Linux Community: We Need To Talk.". Gaslamp Games. Retrieved 2011-01-30.
The Linux community, in their infinite wisdom, proceeds to flame the hell out of CDE. [...] “We should all just be using package management.” Here is what I want to say, and let my words be carried down from the mountaintops, written on tiny stone tablets: Package management is not a universal panacea.
- Byfield, Bruce (2007-02-12). "Autopackage struggling to gain acceptance". linux.com. Archived from the original on 2008-03-31. Retrieved 2012-01-21.
If Hearn is correct, the real lesson of Autopackage is not how to improve software installation, but the difficulty -- perhaps the impossibility -- of large-scale changes in Linux architecture this late in its history. It's a sobering, disappointing conclusion to a project that once seemed so promising.
- "AppImages". Elementary Project. Archived from the original on December 13, 2010. Retrieved January 19, 2012.
- "jPort. Java portable desktop". jwork.org. Retrieved September 1, 2013..