What is software portability?
Software portability is a characteristic attributed to a computer program if it can run with minimal rework on operating systems (OSes) other than the one for which it was created. Software portability is important for applications, as the ability to work on other desktop and mobile platforms increases user flexibility and the application's potential user base. Building software with portability in mind can save developers time and overhead when moving new software across an environment.
Porting is the task of doing any work necessary to make the computer program run in the new environment. Likewise, the term portability itself is a measure of whether software can be ported without requiring major rework.
For example, a portable application could work on platforms such as Windows, Linux, iOS and Android. The porting process might include transferring installed program files to another system or creating the same program using different source code.
In general, programs that adhere to standard program interfaces are portable. Ideally, such a program needs only to be compiled for the OS to which it's being ported. Extensions might need to be removed or replaced with comparable functions in the new OS. In addition to language differences, porting can also require data conversion and adaptation to new system procedures for running an application.
Types of software portability
The following are three basic types of software portability:
- Application portability refers to apps that are designed with portability in mind. Portable applications are converted from one environment to another.
- Source code portability refers to building a program in a way that the same source code works in different environments. However, all the platforms must support the same programming language.
- Data portability refers to data that's movable from one database or data center to another. If the data isn't readily movable to another environment, it must be re-created for the other system.
Other, more specific instances of portability could include containerized applications. For example, a containerized application can be run on any host platform that supports containers and runs the same OSes.
How to implement software portability
Implementing software portability can differ depending on what's being created. However, as a general process, the first step is to document any system requirements and dependencies the software needs for the move to a new environment. It might be possible to use a tool, such as AWS Data Migration Service, to automatically move data between two environments. Automation tools such as Red Hat Ansible can also aid in the porting process.
If the application or software requires too much work to easily port, it should be redesigned to support portability or must be re-created in a separate environment.
For example, porting source code includes recompiling the source code. If this is too difficult, or if there are additional hurdles making the porting more difficult, then parts of the code might need to be rewritten. Other potential hurdles could include if specific file paths aren't portable or if third-party libraries aren't available on an OS.
Benefits and drawbacks of software portability
Software portability offers the following benefits:
- Increased flexibility for end users. End users can choose which platform or OS to use to access a specific application or software.
- Reduced time and effort. Creating an application with portability in mind helps reduce the time and effort that might be needed to port the application later.
- Increased user base. If a web app is available on both desktop and mobile web browsers, the potential user base expands compared with if it were just available on desktop browsers.
However, potential downsides of software portability could include the following:
- Redevelopment required. Some software, code or applications might require too much work to be considered portable, meaning that major pieces of the program must be redeveloped.
- Degree of portability. The degree to which some software might be considered portable can differ per environment, potentially adding more work.
- Slower portability. Some software porting might be slower because the software isn't well optimized for the other environment.
Software portability strategies
There are three strategies, or dimensions, to the software portability process: vertical, horizontal and deep.
- Vertical. Vertical, also called development lifecycle, is a process of creating portability throughout a software development release cycle. To ensure the consistency of an application, portability is created through development, testing, quality assurance and production environments. This helps ensure the software behaves in environments that match production.
- Horizontal. Horizontal, also called platform or provider, focuses on dependency and flexibility, typically through cloud migrations or multi-cloud deployments. Horizontally portable systems can run on infrastructure such as Windows or Linux, or on cloud service providers such as AWS or Microsoft Azure.
- Deep. Deep, also called replication, focuses on supporting code, architectures or software at a large scale. This means creating a service that can maintain multiple instances at once. Methods to enact deep portability include the use of load balancing, API gateways or service meshes.
Learn more about the process of designing a cloud application with portability as a top tenant.