cross computer software implemented on multiple computing platforms crossplatform redirects here for the metro system interchange see crossplatform interchange multiplatform redirects here for the mode of storytelling in television see multiplatform television in computing crossplatform software also multiplatform software or platformindependent software is computer software that is implemented on multiple computing platforms for example a crossplatform application may run on microsoft windows linux and macos crossplatform programs may run on as many as all existing platforms or on as few as two platforms crossplatform frameworks such as qt xamarin phonegap ionic and react native exist to aid crossplatform development platforms platform computing platform can refer to the type of processor cpu or other hardware on which a given operating system or application runs the type of operating system on a computer or the combination of the type of hardware and the type of operating system running on it there are however many devices such as smartphones that are also effectively computer platforms but less commonly thought about in that way application software can be written to depend on the features of a particular platformeither the hardware operating system or virtual machine it runs on the java platform is a virtual machine platform which runs on many operating systems and hardware types and is a common platform for software to be written for hardware platforms a hardware platform can refer to an instruction set architecture for example x86 architecture and its variants such as ia32 and x8664 these machines often run one version of microsoft windows though they can run other operating systems as well including linux openbsd netbsd macos and freebsd the 32bit arm architecture and newer 64bit version is common on smartphones and tablet computers which run android ios and other mobile operating systems software platforms software platforms can either be an operating system or programming environment though more commonly it is a combination of both a notable exception to this is java which uses an operating system independent virtual machine for its compiled code known in the world of java as bytecode examples of software platforms are blackberry android for smartphones and tablet computers x86 arm ios arm microsoft windows x86 arm the cli also known by the implementation names net framework from microsoft and crossplatform variant mono previously by novell and now by xamarin java web browsers more or less compatible with each other running javascript webapps linux x86 powerpc arm and other architectures macos x86 powerpc on 105 and below mendix solaris sparc x86 playstation 4 x86 playstation 3 powerpc based and playstation vita arm minorhistorical amigaos m68k amigaos 4 powerpc aros x86 powerpc m68k morphos powerpc atari tos mint bsd many platforms see netbsdnet for example dostype systems on the x86 msdos imb pc dos drdos s os2 ecomstation java platform java platform as previously noted the java platform is an exception to the general rule that an operating system is a software platform the java language typically compiles to a virtual machine a virtual cpu which runs all of the code that is written for the language this enables the same executable binary to run on all systems that implement a java virtual machine jvm java programs can be executed natively using a java processor this isnt common and is mostly used for embedded systems java code running in the jvm has access to osrelated services like disk io and network access if the appropriate privileges are granted the jvm makes the system calls on behalf of the java application this setup allows users to decide the appropriate protection level depending on an acl for example disk and network access is usually enabled for desktop applications but not for browserbased applets jni can also be used to enable access to operating system specific functions currently java standard edition programs can run on microsoft windows macos several unixlike operating systems and several more nonunixlike operating systems like embedded systems for mobile applications browser plugins are used for windows and mac based devices and android has builtin support for java there are also subsets of java such as java card or java platform micro edition designed for resourceconstrained devices implementations for a piece of software to be considered crossplatform it must be able to function on more than one computer architecture or operating system developing such a program can be a timeconsuming task because different operating systems have different application programming interfaces api for example linux uses a different api for application software than windows does software written for a particular operating system does not automatically work on all architectures that operating system supports one example as of august 2006 was openofficeorg which did not natively run on the amd64 or intel 64 lines of processors implementing the x8664 standards for computers this has since been changed and the openofficeorg suite of software is mostly ported to these 64bit systems this also means that just because a program is written in a popular programming language such as c or c it does not mean it will run on all operating systems that support that programming languageor even on the same operating system on a different architecture web applications web applications are typically described as crossplatform because ideally they are accessible from any of various web browsers within different operating systems such applications generally employ a clientserver system architecture and vary widely in complexity and functionality this wide variability significantly complicates the goal of crossplatform capability which is routinely at odds with the goal of advanced functionality basic web applications perform all or most processing from a stateless server and pass the result to the client web browser all user interaction with the application consists of simple exchanges of data requests and server responses these types of applications were the norm in the early phases of world wide web application development such applications follow a simple transaction model identical to that of serving static web pages today they are still relatively common especially where crossplatform compatibility and simplicity are deemed more critical than advanced functionalities prominent examples of advanced web applications include the web interface to gmail a9com google maps website and the live search service now bing from microsoft such advanced applications routinely depend on additional features found only in the more recent versions of popular web browsers these dependencies include ajax javascript dynamic html svg and other components of rich internet applications older versions of popular web browsers tend to lack support for certain features design strategies because of the competing interests of crossplatform compatibility and advanced functionality numerous alternative web application design strategies have emerged such strategies include graceful degradation graceful degradation attempts to provide the same or similar functionality to all users and platforms while diminishing that functionality to a least common denominator for more limited client browsers for example a user attempting to use a limitedfeature browser to access gmail may notice that gmail switches to basic mode with reduced functionality this differs from other crossplatform techniques which attempt to provide equivalent functionality not just adequate functionality across platforms multiple codebases multiple codebase applications maintain distinct codebases for different hardware and os platforms with equivalent functionality this obviously requires a duplication of effort in maintaining the code but can be worthwhile where the amount of platformspecific code is high single codebase this strategy relies on having one codebase that may be compiled to multiple platformspecific formats one technique is conditional compilation with this technique code that is common to all platforms is not repeated blocks of code that are only relevant to certain platforms are made conditional so that they are only interpreted or compiled when needed another technique is separation of functionality which disables functionality not supported by client browsers or operating systems while still delivering a complete application to the user see also separation of concerns this technique is used in web development where interpreted code as in scripting languages can query the platform it is running on to execute different blocks conditionally thirdparty libraries thirdparty libraries attempt to simplify crossplatform capability by hiding the complexities of client differentiation behind a single unified api responsive web design responsive web design rwd is a web design approach aimed at crafting the visual layout of sites to provide an optimal viewing experienceeasy reading and navigation with a minimum of resizing panning and scrollingacross a wide range of devices from mobile phones to desktop computer monitors little or no platformspecific code is used with this technique testing strategies one complicated aspect of crossplatform web application design is the need for software testing in addition to the complications mentioned previously there is the additional restriction that some web browsers prohibit installation of different versions of the same browser on the same operating system although there are several development approaches that companies use to target multiple platforms all of them result in software that requires substantial manual effort for testing and maintenance across the supported platforms techniques such as full virtualization are sometimes used as a workaround for this problem using tools such as the page object model cross platform tests can be scripted in such a way that one test case is usable for multiple versions of an app so long as the different versions have similar user interfaces both versions can be tested at one time with one test case traditional applications web applications are becoming increasingly popular but many computer users still use traditional application software which does not rely on a clientwebserver architecture the distinction between traditional and web applications is not always clear features installation methods and architectures for web and traditional applications overlap and blur the distinction nevertheless this simplifying distinction is a common and useful generalization binary software traditionally in modern computing application software has been distributed to endusers as binary file especially executable files executables only support the operating system and computer architecture that they were built forwhich means that making a single crossplatform executable would be something of a massive task and is generally replaced by offering a selection of executables for the platforms supported for software that is distributed as a binary executable such as software written in c or c the programmer must build the software for each different operating system and computer architecture ie must use a toolset that translatestranscompilesa single codebase into multiple binary executables for example firefox an opensource web browser is available on windows macos both powerpc and x86 through what apple inc calls a universal binary linux and bsd on multiple computer architectures the four platforms in this case windows macos linux and bsd are separate executable distributions although they come from the same source code the use of different toolsets to perform different builds may not be sufficient to achieve a variety of working executables for different platforms in this case the software engineer must port it ie amend the code to be suitable to a new computer architecture or operating system for example a program such as firefox which already runs on windows on the x86 family can be modified and rebuilt to run on linux on the x86 and potentially other architectures as well the multiple versions of the code may be stored as separate codebases or merged into one codebase by conditional compilation see above note that while porting must be accompanied by crossplatform building the reverse is not the case as an alternative to porting crossplatform virtualization allows applications compiled for one cpu and operating system to run on a system with a different cpu andor operating system without modification to the source code or binaries as an example apples rosetta which is built into intelbased macintosh computers runs applications compiled for the previous generation of macs that used powerpc cpus another example is ibm powervm lx86 which allows linuxx86 applications to run unmodified on the linuxpower operating system scripts and interpreted languages a script can be considered to be crossplatform if its interpreter is available on multiple platforms and the script only uses the facilities provided by the language that is a script written in python for a unixlike system will likely run with little or no modification on windows because python also runs on windows there is also more than one implementation of python that will run the same scripts eg ironpython for net framework the same goes for many of the opensource programming languages that are available and are scripting languages unlike binary executable files the same script can be used on all computers that have software to interpret the script this is because the script is generally stored in plain text in a text file there may be some issues however such as the type of new line character that sits between the lines generally however little or no work has to be done to make a script written for one system run on another some quite popular crossplatform scripting or interpreted languages are bash a unix shell commonly run on linux and other modern unixlike systems as well as on windows via the cygwin posix compatibility layer perl a scripting language first released in 1987 used for cgi www programming small system administration tasks and more php a scripting language most popular in use for web applications python a modern scripting language where the focus is on rapid application development and easeofwriting instead of program runtime efficiency ruby a scripting language whose purpose is to be objectoriented and easy to read can also be used on the web through ruby on rails tcl a dynamic programming language suitable for a wide range of uses including web and desktop applications networking administration testing and many more video games crossplatform or multiplatform is a term that can also apply to video games released on a range of video game consoles specialized computers dedicated to the task of playing games examples of crossplatform video games include miner 2049er tomb raider legend fifa video game series nhl series minecraft each has been released across a variety of gaming platforms such as the wii playstation 3 xbox 360 personal computers pcs and mobile devices the characteristics of a particular system may lengthen the time taken to implement a video game across multiple platforms so a video game may initially be released on a few platforms and then later released on remaining platforms typically this situation occurs when a new gaming system is released because video game developers need to acquaint themselves with the hardware and software associated with the new console some games may not become crossplatform because of licensing agreements between developers and video game console manufacturers that limit development of a game to one particular console as an example disney could create a game with the intention of release on the latest nintendo and sony game consoles should disney license the game with sony first disney may in exchange be required to release the game solely on sonys console for a short time or indefinitelyeffectively prohibiting a crossplatform release for the duration crossplatform play crossplatform play and list of video games that support crossplatform play several developers have implemented means to play games online while using different platforms psyonix epic games microsoft and valve corporation all possess technology that allows xbox 360 and playstation 3 gamers to play with pc gamers leaving the decision of which platform to use to consumers the first game to allow this level of interactivity between pc and console games was quake 3 games that feature crossplatform online play include rocket league final fantasy xiv street fighter v killer instinct paragon and fable fortune and minecraft with its better together update on windows 10 vr editions pocket edition and xbox one crossplatform programming crossplatform programming is the practice of actively writing software that will work on more than one platform approaches to crossplatform programming there are different ways of approaching the problem of writing a crossplatform application program one such approach is simply to create multiple versions of the same program in different source treesin other words the windows version of a program might have one set of source code files and the macintosh version might have another while a foss nix system might have another while this is a straightforward approach to the problem it has the potential to be considerably more expensive in development cost development time or both especially for corporate entities the idea behind this is to create more than two different programs that have the ability to behave similarly to each other it is also possible that this means of developing a crossplatform application will result in more problems with bug tracking and fixing because the two different source trees would have different programmers and thus different defects in each version another approach that is used is to depend on preexisting software that hides the differences between the platformscalled abstraction of the platformsuch that the program itself is unaware of the platform it is running on it could be said that such programs are platform agnostic programs that run on the java virtual machine jvm are built in this fashion some applications mix various methods of crossplatform programming to create the final application an example of this is the firefox web browser which uses abstraction to build some of the lowerlevel components separate source subtrees for implementing platformspecific features like the gui and the implementation of more than one scripting language to help facilitate ease of portability firefox implements xul css and javascript for extending the browser in addition to classic netscapestyle browser plugins much of the browser itself is written in xul css and javascript as well crossplatform programming toolkits and environments there are a number of tools which are available to help facilitate the process of crossplatform programming 8th a crossplatform development language which utilizes juce as its gui layer the platforms it currently supports are android ios windows macos linux and raspberry pi anant computing a mobile application platform that works in all indian languages including their keyboards which is also supports appwallet and native performance inside all operating systems appeariq a framework that supports the workflow of app development and deployment in an enterprise environment natively developed containers present hardware features of the mobile devices or tablets through an api to html5 code thus facilitating the development of mobile apps that run on different platforms cairo a free software library used to provide a vector graphicsbased deviceindependent api it is designed to provide primitives for 2dimensional drawing across a number of different backends cairo is written in c and has bindings for many programming languages cocos2d an open source toolkit and game engine for developing 2d and simple 3d crossplatform games and applications delphi a cross platform ide which uses pascal language for development currently it supports android ios windows macos ecere sdk a cross platform gui 2d3d graphics toolkit and ide written in ec and with support for additional languages such as c and python currently it supports linux freebsd windows android macos and the web through emscripten or binaryen webassembly eclipse an open source crossplatform development environment implemented in java with a configurable architecture which supports many tools for software development addons are available for several languages including java and c fltk another open source cross platform toolkit but more lightweight because it restricts itself to the gui fpgui an open source widget toolkit that is completely implemented in object pascal it currently supports linux windows and a bit of windows ce genexus a windows rapid software development solution for crossplatform application creation and deployment based on knowledge representation and supporting c cobol java including android and blackberry smart devices objectivec for apple mobile devices rpg ruby visual basic and visual foxpro glbasic a basic dialoect and compiler that generates c code it includes cross compilers for many platforms and supports numerous platform windows mac linux androidios and some exotic handhelds gtk an open source widget toolkit for unixlike systems with x11 and microsoft windows haxe an open source crossplatform language juce an application framework written in c used to write native software on numerous systems microsoft windows posix macos with no change to the code lazarus a programming environment for the freepascal compiler it supports the creation of selfstanding graphical and console applications and runs on linux macosx ios android wince windows and web maxmsp a visual programming language that encapsulates platformindependent code with a platformspecific runtime environment into applications for macos and windows mechdome a crossplatform android runtime it allows unmodified android apps to run natively on ios and macos mendix a cloud based lowcode application development platform monocross an opensource modelviewcontroller design pattern where the model and controller are shared crossplatform but the view is platformspecific mono an opensource crossplatform version of microsoft net a framework for applications and programming languages mosync an opensource sdk for mobile platform app development in the c family mozilla application framework an open source platform for building macos windows and linux applications opengl a crossplatform 3d graphics library purebasic a proprietary crossplatform language and ide for building macos windows and linux applications qt an application framework and widget toolkit for unixlike systems with x11 microsoft windows macos and other systemsavailable under both open source and proprietary licenses simple and fast multimedia library a multimedia c api that provides low and high level access to graphics input audio etc simple directmedia layer an opensource crossplatform multimedia library written in c that creates an abstraction over various platforms graphics sound and input apis it runs on many operating systems including linux windows and macos and is aimed at games and multimedia applications smartface a cross platform native app development tool to create mobile applications for android and ios using wysiwyg design editor with javascript code editor tcltk ultimate a c crossplatform rapid application development framework focused on programmers productivity it includes a set of libraries gui sql etc and an integrated development environment it supports windows and unixlike oss the u competes with popular scripting languages while preserving cc runtime characteristics it has its own integrated development environment theide which features blitzbuild technology to speedup c rebuilds up to 4 times unity another crossplatform sdk which uses unity engine unreal a crossplatform sdk which uses unreal engine vplay engine vplay is a crossplatform development sdk based on the popular qt framework vplay apps and games are created within qt creator wavemaker a crossplatform lowcode development tool to create responsive web and hybrid mobile android ios applications windev integrated development environment for windows linux net and java also with support for internet and intranet wxwidgets an open source widget toolkit that is also an application framework it runs on unixlike systems with x11 microsoft windows and macos it permits applications written to use it to run on all of the systems that it supports if the application does not use any operating systemspecific programming in addition to it xojo a rad ide developed by xojo inc that uses an objectoriented programming language to create desktop web and ios apps xojo makes native compiled desktop apps for macos windows linux and raspberry pi it creates compiled web apps that can be run as standalone servers or through cgi and it recently added the ability to create native ios apps challenges to crossplatform development there are certain issues associated with crossplatform development some of these include testing crossplatform applications may be considerably more complicated since different platforms can exhibit slightly different behaviors or subtle bugs this problem has led some developers to deride crossplatform development as write once debug everywhere a take on sun microsystems write once run anywhere marketing slogan developers are often restricted to using the lowest common denominator subset of features which are available on all platforms this may hinder the applications performance or prohibit developers from using the most advanced features of each platform different platforms often have different user interface conventions which crossplatform applications do not always accommodate for example applications developed for macos and gnome are supposed to place the most important button on the righthand side of a window or dialog whereas microsoft windows and kde have the opposite convention though many of these differences are subtle a crossplatform application which does not conform appropriately to these conventions may feel clunky or alien to the user when working quickly such opposing conventions may even result in data loss such as in a dialog box confirming whether the user wants to save or discard changes to a file scripting languages and virtual machines must be translated into native executable code each time the application is executed imposing a performance penalty this penalty can be alleviated using advanced techniques like justintime compilation but even using such techniques some computational overhead may be unavoidable different platforms require the use of native package formats such as rpm and msi multiplatform installers such as installanywhere address this need crossplatform execution environments may suffer crossplatform security flaws creating a fertile environment for crossplatform malware list of widget toolkits platform virtualization java software platform language binding transcompiler binary code compatibility 