In
software engineering
Software engineering is a systematic engineering approach to software development.
A software engineer is a person who applies the principles of software engineering to design, develop, maintain, test, and evaluate computer software. The term '' ...
, porting is the process of adapting
software
Software is a set of computer programs and associated documentation and data. This is in contrast to hardware, from which the system is built and which actually performs the work.
At the lowest programming level, executable code consists ...
for the purpose of achieving some form of execution in a
computing environment that is different from the one that a given program (meant for such execution) was originally designed for (e.g., different
CPU, operating system, or third party
library
A library is a collection of materials, books or media that are accessible for use and not just for display purposes. A library provides physical (hard copies) or digital access (soft copies) materials, and may be a physical location or a vir ...
). The term is also used when software/hardware is changed to make them usable in different environments.
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.
Etymology
The term "port" is derived from the Latin ''
portāre'', meaning "to carry". When code is not compatible with a particular
operating system
An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs.
Time-sharing operating systems schedule tasks for efficient use of the system and may also in ...
or
architecture
Architecture is the art and technique of designing and building, as distinguished from the skills associated with construction. It is both the process and the product of sketching, conceiving, planning, designing, and constructing building ...
, the code must be "carried" to the new system.
The term is not generally applied to the process of adapting software to run with less memory on the same CPU and operating system.
Software developers often claim that the software they write is ''
portable
Portable may refer to:
General
* Portable building, a manufactured structure that is built off site and moved in upon completion of site and utility work
* Portable classroom, a temporary building installed on the grounds of a school to provide a ...
'', meaning that little effort is needed to adapt it to a new environment. The amount of effort actually needed depends on several factors, including the extent to which the original environment (the ''source platform'') differs from the new environment (the ''target platform''), the experience of the original authors in knowing which
programming language
A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming ...
constructs and third party library calls are unlikely to be portable, and the amount of effort invested by the original authors in only using portable constructs (platform specific constructs often provide a cheaper solution).
History
The number of significantly different CPUs and operating systems used on the desktop today is much smaller than in the past. The dominance of the
x86
x86 (also known as 80x86 or the 8086 family) is a family of complex instruction set computer (CISC) instruction set architectures initially developed by Intel based on the Intel 8086 microprocessor and its 8088 variant. The 8086 was introd ...
architecture
Architecture is the art and technique of designing and building, as distinguished from the skills associated with construction. It is both the process and the product of sketching, conceiving, planning, designing, and constructing building ...
means that most desktop software is never ported to a different CPU. In that same market, the choice of operating systems has effectively been reduced to three:
Microsoft Windows
Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for serv ...
,
macOS
macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac computers. Within the market of desktop and lapt ...
, and
Linux
Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which ...
. However, in the
embedded systems
An embedded system is a computer system—a combination of a computer processor, computer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electronic system. It is ''embedded'' as ...
and
mobile
Mobile may refer to:
Places
* Mobile, Alabama, a U.S. port city
* Mobile County, Alabama
* Mobile, Arizona, a small town near Phoenix, U.S.
* Mobile, Newfoundland and Labrador
Arts, entertainment, and media Music Groups and labels
* Mobile ( ...
markets,
portability remains a significant issue, with the
ARM
In human anatomy, the arm refers to the upper limb in common usage, although academically the term specifically means the upper arm between the glenohumeral joint (shoulder joint) and the elbow joint. The distal part of the upper limb between th ...
being a widely used alternative.
International standards, such as those promulgated by the
ISO
ISO is the most common abbreviation for the International Organization for Standardization.
ISO or Iso may also refer to: Business and finance
* Iso (supermarket), a chain of Danish supermarkets incorporated into the SuperBest chain in 2007
* Iso ...
, greatly facilitate porting by specifying details of the computing environment in a way that helps reduce differences between different standards-conforming
platforms. Writing software that stays within the bounds specified by these standards represents a practical although nontrivial effort. Porting such a program between two standards-compliant platforms (such as
POSIX.1
The Portable Operating System Interface (POSIX) is a family of standardization, standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines both the system- and user-level application p ...
) can be just a matter of loading the source code and
recompiling it on the new platform. However, practitioners often find that various minor corrections are required, due to subtle platform differences. Most standards suffer from "gray areas" where differences in interpretation of standards lead to small variations from platform to platform.
There also exists an ever-increasing number of tools to facilitate porting, such as the
GNU Compiler Collection
The GNU Compiler Collection (GCC) is an optimizing compiler produced by the GNU Project supporting various programming languages, hardware architectures and operating systems. The Free Software Foundation (FSF) distributes GCC as free software ...
, which provides consistent programming languages on different platforms, and
Autotools
The GNU Autotools, also known as the GNU Build System, is a suite of programming tools designed to assist in making source code packages portable to many Unix-like systems.
It can be difficult to make a software program portable: the C compiler ...
, which automates the detection of minor variations in the environment and adapts the software accordingly before compilation.
The compilers for some
high-level programming language
In computer science, a high-level programming language is a programming language with strong Abstraction (computer science), abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language ...
s (e.g.
Eiffel
Eiffel may refer to:
Places
* Eiffel Peak, a summit in Alberta, Canada
* Champ de Mars – Tour Eiffel station, Paris, France; a transit station
Structures
* Eiffel Tower, in Paris, France, designed by Gustave Eiffel
* Eiffel Bridge, Ungheni, M ...
,
Esterel
Esterel is a synchronous programming language for the development of complex reactive systems. The imperative programming style of Esterel allows the simple expression of parallelism and preemption. As a consequence, it is well suited for contr ...
) gain portability by outputting source code in another high level
intermediate language
An intermediate representation (IR) is the data structure or code used internally by a compiler or virtual machine to represent source code. An IR is designed to be conducive to further processing, such as optimization and translation. A "good ...
(such as
C) for which compilers for many platforms are generally available.
Two activities related to (but distinct from) porting are
emulating
In computing, an emulator is hardware or software that enables one computer system (called the ''host'') to behave like another computer system (called the ''guest''). An emulator typically enables the host system to run software or use peri ...
and
cross-compiling
A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is running. For example, a compiler that runs on a PC but generates code that runs on an Android smartphone is a cross c ...
.
Porting compilers
Instead of translating directly into
machine code
In computer programming, machine code is any low-level programming language, consisting of machine language instructions, which are used to control a computer's central processing unit (CPU). Each instruction causes the CPU to perform a very ...
, modern
compilers
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
translate to a machine independent
intermediate code
Bytecode (also called portable code or p-code) is a form of instruction set designed for efficient execution by a software Interpreter (computing), interpreter. Unlike Human-readable code, human-readable source code, bytecodes are compact nume ...
in order to enhance portability of the compiler and minimize design efforts.
The intermediate language defines a ''
virtual machine
In computing, a virtual machine (VM) is the virtualization/emulation of a computer system. Virtual machines are based on computer architectures and provide functionality of a physical computer. Their implementations may involve specialized hardw ...
'' that can execute all programs written in the
intermediate language
An intermediate representation (IR) is the data structure or code used internally by a compiler or virtual machine to represent source code. An IR is designed to be conducive to further processing, such as optimization and translation. A "good ...
(a machine is defined by its language and vice versa).
[ describes the terms and their relations.] The intermediate code instructions are translated into equivalent machine code sequences by a ''code generator'' to create
executable code
In computing, executable code, an executable file, or an executable program, sometimes simply referred to as an executable or binary, causes a computer "to perform indicated tasks according to encoded instructions", as opposed to a data file ...
. It is also possible to skip the generation of machine code by actually implementing an
interpreter or
JIT
Jit (also known as jiti, jit-jive and the Harare beat) is a style of popular Zimbabwean dance music. It features a swift rhythm played on drums and accompanied by a guitar. Jit evolved out many diverse influences, including domestic chimurenga, ...
for the virtual machine.
The use of intermediate code enhances portability of the compiler, because only the machine dependent code (the interpreter or the code generator) of the compiler itself needs to be ported to the target machine. The remainder of the compiler can be imported as intermediate code and then further processed by the ported code generator or interpreter, thus producing the compiler software or directly executing the intermediate code on the interpreter.
The machine independent part can be developed and tested on another machine (the ''host machine''). This greatly reduces design efforts, because the machine independent part needs to be developed only once to create portable intermediate code.
An interpreter is less complex and therefore easier to port than a code generator, because it is not able to do code optimizations due to its limited view of the program code (it only sees one instruction at a time, and you need a sequence to do optimization). Some interpreters are extremely easy to port, because they only make minimal assumptions about the instruction set of the underlying hardware. As a result, the virtual machine is even simpler than the target CPU.
Writing the compiler sources entirely in the programming language the compiler is supposed to translate, makes the following approach, better known as ''
compiler bootstrapping'', feasible on the target machine:
# Port the interpreter. This needs to be coded in
assembly code
In computer programming, assembly language (or assembler language, or symbolic machine code), often referred to simply as Assembly and commonly abbreviated as ASM or asm, is any low-level programming language with a very strong correspondence b ...
, using an already present
assembler
Assembler may refer to:
Arts and media
* Nobukazu Takemura, avant-garde electronic musician, stage name Assembler
* Assemblers, a fictional race in the ''Star Wars'' universe
* Assemblers, an alternative name of the superhero group Champions of A ...
on the target.
# Adapt the source of the code generator to the new machine.
# Execute the adapted source using the interpreter with the code generator source as input. This will generate the machine code for the code generator.
The difficult part of coding the optimization routines is done using the high-level language instead of the assembly language of the target.
According to the designers of the
BCPL
BCPL ("Basic Combined Programming Language") is a procedural, imperative, and structured programming language. Originally intended for writing compilers for other languages, BCPL is no longer in common use. However, its influence is still ...
language, interpreted code (in the BCPL case) is more compact than machine code; typically by a factor of two to one. Interpreted code however runs about ten times slower than compiled code on the same machine.
The designers of the
Java programming language
Java is a high-level, class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. It is a general-purpose programming language intended to let programmers ''write once, run anywh ...
try to take advantage of the compactness of interpreted code, because a Java program may need to be transmitted over the Internet before execution can start on the target's
Java virtual machine
A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally describes ...
(JVM).
Porting of video games
Porting is also the term used when a
video game
Video games, also known as computer games, are electronic games that involves interaction with a user interface or input device such as a joystick, controller, keyboard, or motion sensing device to generate visual feedback. This fee ...
designed to run on one platform, be it an
arcade
Arcade most often refers to:
* Arcade game, a coin-operated game machine
** Arcade cabinet, housing which holds an arcade game's hardware
** Arcade system board, a standardized printed circuit board
* Amusement arcade, a place with arcade games
* ...
,
video game console
A video game console is an electronic device that Input/output, outputs a video signal or image to display a video game that can be played with a game controller. These may be home video game console, home consoles, which are generally placed i ...
, or
personal computer
A personal computer (PC) is a multi-purpose microcomputer whose size, capabilities, and price make it feasible for individual use. Personal computers are intended to be operated directly by an end user, rather than by a computer expert or tec ...
, is converted to run on a different platform, perhaps with some minor differences.
From the beginning of video games through to the 1990s, "ports", at the time often known as "conversions", were often not true ports, but rather reworked versions of the games due to limitations of different systems. For example, the 1982 game ''
The Hobbit
''The Hobbit, or There and Back Again'' is a children's fantasy novel by English author J. R. R. Tolkien. It was published in 1937 to wide critical acclaim, being nominated for the Carnegie Medal and awarded a prize from the '' ...
'', a text adventure augmented with graphic images, has significantly different graphic styles across the range of personal computers that its ports were developed for.
However, many 21st century video games are developed using software (often in
C++
C++ (pronounced "C plus plus") is a high-level general-purpose programming language created by Danish computer scientist Bjarne Stroustrup as an extension of the C programming language, or "C with Classes". The language has expanded significan ...
) that can output code for one or more consoles as well as for a PC without the need for actual porting (instead relying on the common porting of individual component
libraries
A library is a collection of materials, books or media that are accessible for use and not just for display purposes. A library provides physical (hard copies) or digital access (soft copies) materials, and may be a physical location or a vir ...
).
Porting arcade games to home systems with inferior hardware was difficult. The ported version of ''
Pac-Man
originally called ''Puck Man'' in Japan, is a 1980 maze action video game developed and released by Namco for arcades. In North America, the game was released by Midway Manufacturing as part of its licensing agreement with Namco America. Th ...
'' for the
Atari 2600
The Atari 2600, initially branded as the Atari Video Computer System (Atari VCS) from its release until November 1982, is a home video game console developed and produced by Atari, Inc. Released in September 1977, it popularized microprocessor- ...
omitted many of the visual features of the original game to compensate for the lack of
ROM
Rom, or ROM may refer to:
Biomechanics and medicine
* Risk of mortality, a medical classification to estimate the likelihood of death for a patient
* Rupture of membranes, a term used during pregnancy to describe a rupture of the amniotic sac
* ...
space and the hardware struggled when multiple ghosts appeared on the screen creating a flickering effect. The poor performance of the
Atari 2600 ''Pac-Man'' is cited by some scholars as a cause of the
video game crash of 1983
The video game crash of 1983 (known as the Atari shock in Japan) was a large-scale recession in the video game industry that occurred from 1983 to 1985, primarily in the United States. The crash was attributed to several factors, including ma ...
.
Many early ports suffered significant gameplay quality issues because computers greatly differed.
Richard Garriott
Richard Allen Garriott de Cayeux (''né'' Garriott; born July 4, 1961) is an American video game developer, entrepreneur and private astronaut. Although both his parents were American, he maintains dual British and American citizenship by birth. ...
stated in 1984 at
Origins Game Fair
Origins Game Fair is an annual gaming convention that was first held in 1975. Since 1996, it has been held in Columbus, Ohio at the Greater Columbus Convention Center.
Origins is run by The Game Manufacturers Association (GAMA). Origins was cha ...
that
Origin Systems
Origin Systems, Inc. was an American video game developer based in Austin, Texas. It was founded on March 3, 1983, by Richard Garriott and his brother Robert Garriott, Robert. Origin is best known for their groundbreaking work in multiple genres ...
developed computer games for the
Apple II series
The Apple II series (trademarked with square brackets as "Apple ] ''" and rendered on later models as "Apple //") is a family of home computers, one of the first highly successful mass-produced microcomputer products, designed primaril ...
first then ported them to
Commodore 64
The Commodore 64, also known as the C64, is an 8-bit home computer introduced in January 1982 by Commodore International (first shown at the Consumer Electronics Show, January 7–10, 1982, in Las Vegas). It has been listed in the Guinness ...
and
Atari 8-bit
The Atari 8-bit family is a series of 8-bit home computers introduced by Atari, Inc. in 1979 as the Atari 400 and Atari 800. The series was successively upgraded to Atari 1200XL , Atari 600XL, Atari 800XL, Atari 65XE, Atari 130XE, Atari 800XE, ...
, because the latter machines'
sprites and other sophisticated features made porting from them to Apple "far more difficult, perhaps even impossible".
Reviews complained of ports that suffered from "Apple conversionitis",
retaining the Apple's "lousy sound and black-white-green-purple graphics";
after Garriott's statement, when
Dan Bunten
Danielle Bunten Berry (February 19, 1949 – July 3, 1998), formerly known as Dan Bunten, was an American game designer and programmer, known for the 1983 game ''M.U.L.E.'', one of the first influential multiplayer video games, and 1984's '' T ...
asked "Atari and Commodore people in the audience, are you happy with the Apple rewrites?" the audience shouted "No!" Garriott responded, "
therwisethe Apple version will never get done. From a publisher's point of view that's not money wise".
Others worked differently.
Ozark Softscape
Danielle Bunten Berry (February 19, 1949 – July 3, 1998), formerly known as Dan Bunten, was an American game designer and programmer, known for the 1983 game ''M.U.L.E.'', one of the first influential multiplayer video games, and 1984's '' Th ...
, for example, wrote ''
M.U.L.E.
''M.U.L.E.'' is a 1983 multiplayer video game written for the Atari 8-bit family of home computers by Ozark Softscape. Designer Danielle Bunten Berry (credited as Dan Bunten) took advantage of the four joystick ports of the Atari 400 and 800 to a ...
'' for the Atari first because it preferred to develop for the most advanced computers, removing or altering features as necessary during porting. Such a policy was not always feasible; Bunten stated that "M.U.L.E. can't be done for an Apple",
and that the non-Atari versions of ''
The Seven Cities of Gold'' were inferior.
''
Compute!'s Gazette
''Compute!'s Gazette'' (), stylized as ''COMPUTE!'s Gazette'', was a computer magazine of the 1980s, directed at users of Commodore's 8-bit home computers. Announced as ''The Commodore Gazette'', it was a Commodore-only daughter magazine of the ...
'' wrote in 1986 that when porting from Atari to Commodore the original was usually superior. The latter's games' quality improved when developers began creating new software for it in late 1983, the magazine stated.
In porting
arcade game
An arcade game or coin-op game is a coin-operated entertainment machine typically installed in public businesses such as restaurants, bars and amusement arcades. Most arcade games are presented as primarily games of skill and include arcade v ...
s, the terms "arcade perfect" or "arcade accurate" were often used to describe how closely the gameplay, graphics, and other assets on the ported version matched the arcade version. Many arcade ports in the early 1980s were far from arcade perfect as home consoles and computers lacked the sophisticated hardware in arcade games, but games could still approximate the gameplay. Notably, ''
Space Invaders
is a 1978 shoot 'em up arcade game developed by Tomohiro Nishikado. It was manufactured and sold by Taito in Japan, and licensed to the Midway division of Bally for overseas distribution. ''Space Invaders'' was the first fixed shooter and set ...
'' on the
Atari VCS
The Atari 2600, initially branded as the Atari Video Computer System (Atari VCS) from its release until November 1982, is a home video game console developed and produced by Atari, Inc. Released in September 1977, it popularized microprocessor- ...
became the console's
killer app
In marketing terminology, a killer application (commonly shortened to killer app) is any computer program or software that is so necessary or desirable that it proves the core value of some larger technology, such as computer hardware, a video game ...
despite its differences, while the later
''Pac-Man'' port was notorious for its deviations from the arcade version.
Arcade-accurate games became more prevalent starting in the 1990s, starting with the
Neo Geo
Neo Geo is a family of video game hardware developed by SNK. On the market from 1990 to 2004, the brand originated with the release of an arcade system, the Neo Geo MVS and its home console counterpart, the Neo Geo AES.
The Neo Geo MVS was su ...
system from
SNK
is a Japanese video game hardware and software company. It is the successor to the company Shin Nihon Kikaku and presently owns the SNK video game brand and the Neo Geo video game platform. SNK's predecessor Shin Nihon Kikaku was founded in 1978 ...
, which offered both a home console and an arcade system with more advanced versions of the home console's main hardware. This allowed near-arcade perfect games to be played at home. Further consoles such as the
PlayStation
is a video gaming brand that consists of five home video game consoles, two handhelds, a media center, and a smartphone, as well as an online service and multiple magazines. The brand is produced by Sony Interactive Entertainment, a divisi ...
and
Dreamcast
The is a home video game console released by Sega on November 27, 1998, in Japan; September 9, 1999, in North America; and October 14, 1999, in Europe. It was the first sixth-generation video game console, preceding Sony's PlayStation 2, N ...
, also based on arcade hardware, made arcade-perfect games a reality.
A "console port" is a game that was originally made for a console before an identical version is created which can be played on a
personal computer
A personal computer (PC) is a multi-purpose microcomputer whose size, capabilities, and price make it feasible for individual use. Personal computers are intended to be operated directly by an end user, rather than by a computer expert or tec ...
. This term has been widely used by the gaming community. The process of porting a game from a console to a PC is often regarded negatively due to the higher levels of performance that computers generally have being underutilized, partially due to console hardware being fixed throughout their run (with games being developed for console specs), while PCs become more powerful as hardware evolves, but also due to ported games sometimes being poorly optimized for PCs, or lazily ported. While broadly similar, architectural differences may exist such as the use of
unified memory on a console.
See also
*
Console emulator
A video game console emulator is a type of emulator that allows a computing device to emulate a video game console's hardware and play its games on the emulating platform. More often than not, emulators carry additional features that surpass ...
*
Cross-platform
In computing, cross-platform software (also called multi-platform software, platform-agnostic software, or platform-independent software) is computer software that is designed to work in several computing platforms. Some cross-platform software r ...
*
Language binding
In programming and software design, binding is an application programming interface (API) that provides glue code specifically made to allow a programming language to use a foreign library or operating system service (one that is not native to th ...
*
List of system quality attributes
Within systems engineering, quality attributes are realized non-functional requirements used to evaluate the performance of a system. These are sometimes named architecture characteristics, or "ilities" after the suffix many of the words share. ...
*
Poshlib
Posh is a software framework used in cross-platform software development. It was created by Brian Hook. It is BSD licensed and at version 1.3.002.
The Posh software framework provides a header file and an optional C source file.
Posh does not ...
*
Program transformation
A program transformation is any operation that takes a computer program and generates another program. In many cases the transformed program is required to be semantically equivalent to the original, relative to a particular formal semantics and ...
*
Software portability
A computer program is said to be portable if there is very low effort required to make it run on different platforms. The pre-requirement for portability is the generalized abstraction between the application logic and system interfaces. When ...
*
Source port
A source port is a software project based on the source code of a game engine that allows the game to be played on operating systems or computing platforms with which the game was not originally compatible.
Description
Source ports are often cr ...
*
Write once, compile anywhere
Write once, compile anywhere (WOCA) is a philosophy taken by a compiler and its associated Library (computing), software libraries or by a software library/software framework which refers to a capability of writing a computer program that can be c ...
*
Meaning of ''unported''
Notes
References
*
*{{cite book , author-link=Andrew S. Tanenbaum , first=Andrew S. , last=Tanenbaum , title=Structured computer organization , year=1984 , isbn=0-13-854605-3
Interoperability
Source code
de:Portierung