Portability refers to the usability of the same software in different computing environments. In this context, a computer environment is defined by its hardware architecture, operating system and runtime libraries.
Software is portable when the cost of porting it to a new platform is significantly less than the cost of writing it from scratch. The lower the cost of porting software, relative to its implementation cost, the more portable it is said to be.
A prerequirement for portability is the generalized abstraction between the application logic and system interfaces.
The instructions supported by a particular processor and their byte-level encodings are known as its instruction-set architecture (ISA). A program compiled for one type of machine will not run on another. On the other hand, there are many different models of processors within a single family. Each manufacturer produces processors of ever-growing performance and complexity, but the different models remain compatible at the ISA level. Popular families, such as x86-64 or ARM, have processors supplied by multiple manufacturers.
Examples of notable CPU architectures:
- x86 instruction sets (32 and 64 bits).
- Intel’s IA-32 architecture, also called x86-32.
- x86-64 with AMD’s AMD64 and Intel’s Intel 64 versions.
- Single Instruction Multiple Data (SIMD) instruction set extensions: SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, FMA, AVX-512, and others (see the Intel Intrinsics Guide for a full list of technologies).
DEC’s Alpha architecture for workstations and servers (64-bit).
Intel’s Itanium architecture (formely called IA-64) for enterprise servers and high-performance computing systems (64-bit).
MIPS Computer Systems Inc.’s MIPS architecture: big-endian and little-endian, 32 and 64 bits.
Oracle’s SPARC architecture for high-end servers (64-bit).
IBM System z: IBM’s architecture for mainframe computers (64-bit).
MIL-STD-1750A: the U.S.’s military standard computer (16-bit).
- IBM’s AP-101: the Space Shuttle’s computer (32-bit).
In addition, a software-defined GNSS receiver can perform computation offloading, which consists in the transfer of certain computing tasks from the Central Processing Unit (CPU) to an external platform, such as a Graphics Processing Unit (GPU), a Field Programmable Gate Array (FPGA) device or a cloud-based service.
An operating system (OS) is system software that manages computer hardware and software resources and provides common services for computer programs.
Software-defined GNSS receivers are applications, that is, computer programs designed to perform a group of coordinated functions, tasks, or activities for the benefit of the user.
Applications that do not need an operating system are called bare metal applications.
Unix and Unix-like operating systems:
- The present owner of the trademark UNIX is The Open Group, an industry standards consortium. Only systems fully compliant with and certified to the Single Unix Specification qualify as “Unix” (others are called “Unix system-like” or “Unix-like”). Examples:
- The Linux kernel, used in some popular distributions such as Debian, Fedora, Ubuntu, openSUSE, Arch Linux, Linux Mint, Linaro, Raspbian or Google’s Android.
Microsoft Windows is a family of proprietary operating systems designed by Microsoft Corporation and primarily targeted to Intel architecture based computers, with a relevant percent total usage share on Web connected computers. Latest version is Windows 10, which was preceded by Windows 7, Windows Vista and Windows XP.
Indicators of Portability
It follows a list of possible portability indicators for a software-defined GNSS receiver:
Number of supported processor architectures (specify distribution and release).
Supported SIMD technologies.
Support of GPU offloading (define GPU’s vendor/model).
Support of FPGA offloading (define FPGA’s vendor/model).
- Number of supported operating systems:
- GNU/Linux: specify distributions and versions.
- OS X: specify versions.
- Microsoft Windows: specify versions.
- Real Time Operating System (specify).
- Others (define) / None (bare metal program).
Other software dependencies (define).
- Minimal memory and storage requirements.