<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://knowledgebase.pirho.net/index.php?action=history&amp;feed=atom&amp;title=Application_Design_for_Multiple_Platforms</id>
	<title>Application Design for Multiple Platforms - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://knowledgebase.pirho.net/index.php?action=history&amp;feed=atom&amp;title=Application_Design_for_Multiple_Platforms"/>
	<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Application_Design_for_Multiple_Platforms&amp;action=history"/>
	<updated>2026-09-10T08:00:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Application_Design_for_Multiple_Platforms&amp;diff=470&amp;oldid=prev</id>
		<title>Dex: Created page with &quot;&#039;&#039;&#039;Summary:&#039;&#039;&#039; Modern software is expected to run on an increasing number of platforms. Users may access the same application from desktop computers, laptops, tablets, mobile devices, kiosk systems, web browsers, and cloud-hosted environments.  Historically, organisations developed separate applications for each platform. While this approach provides maximum control, it can significantly increase development and maintenance costs.  This article explores the two primary a...&quot;</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Application_Design_for_Multiple_Platforms&amp;diff=470&amp;oldid=prev"/>
		<updated>2026-08-13T09:02:41Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Modern software is expected to run on an increasing number of platforms. Users may access the same application from desktop computers, laptops, tablets, mobile devices, kiosk systems, web browsers, and cloud-hosted environments.  Historically, organisations developed separate applications for each platform. While this approach provides maximum control, it can significantly increase development and maintenance costs.  This article explores the two primary a...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Modern software is expected to run on an increasing number of platforms. Users may access the same application from desktop computers, laptops, tablets, mobile devices, kiosk systems, web browsers, and cloud-hosted environments.&lt;br /&gt;
&lt;br /&gt;
Historically, organisations developed separate applications for each platform. While this approach provides maximum control, it can significantly increase development and maintenance costs.&lt;br /&gt;
&lt;br /&gt;
This article explores the two primary approaches to multi-platform application design: platform-specific development and portable application design. It examines the strengths, weaknesses, and architectural considerations of each approach and provides guidance on choosing the most appropriate strategy.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
The challenge of supporting multiple platforms is almost as old as software development itself.&lt;br /&gt;
&lt;br /&gt;
An application may need to support:&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
* macOS&lt;br /&gt;
* Linux&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* Browser-based environments&lt;br /&gt;
* Embedded systems&lt;br /&gt;
* Virtual desktop environments&lt;br /&gt;
&lt;br /&gt;
The fundamental question becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Should the application target the platform directly, or should it target an abstraction that hides platform differences?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How this question is answered shapes the entire architecture of the solution.&lt;br /&gt;
&lt;br /&gt;
== Platform-Specific Design ==&lt;br /&gt;
&lt;br /&gt;
Platform-specific design creates separate applications for each supported platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Windows Application&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
     Windows&lt;br /&gt;
&lt;br /&gt;
Android Application&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
     Android&lt;br /&gt;
&lt;br /&gt;
iOS Application&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
       iOS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each application is developed using technologies native to that platform.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Platform&lt;br /&gt;
! Typical Technologies&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| Win32, WinForms, WPF, WinUI, .NET&lt;br /&gt;
|-&lt;br /&gt;
| Android&lt;br /&gt;
| Kotlin, Java&lt;br /&gt;
|-&lt;br /&gt;
| iOS&lt;br /&gt;
| Swift, Objective-C&lt;br /&gt;
|-&lt;br /&gt;
| macOS&lt;br /&gt;
| Swift, Cocoa&lt;br /&gt;
|-&lt;br /&gt;
| Linux&lt;br /&gt;
| GTK, Qt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Advantages ===&lt;br /&gt;
&lt;br /&gt;
* Maximum performance&lt;br /&gt;
* Deep platform integration&lt;br /&gt;
* Direct access to operating system features&lt;br /&gt;
* Native user experience&lt;br /&gt;
* Immediate access to new platform capabilities&lt;br /&gt;
&lt;br /&gt;
=== Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
* Multiple codebases&lt;br /&gt;
* Increased development effort&lt;br /&gt;
* Increased maintenance costs&lt;br /&gt;
* Feature parity challenges&lt;br /&gt;
* Larger development teams&lt;br /&gt;
&lt;br /&gt;
=== Typical Use Cases ===&lt;br /&gt;
&lt;br /&gt;
Platform-specific design remains appropriate when:&lt;br /&gt;
&lt;br /&gt;
* Maximum performance is essential&lt;br /&gt;
* Hardware integration is required&lt;br /&gt;
* Platform-specific user experiences are important&lt;br /&gt;
* Operating system features are heavily utilised&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Professional video editing software&lt;br /&gt;
* CAD applications&lt;br /&gt;
* Games&lt;br /&gt;
* Device drivers&lt;br /&gt;
* Operating system utilities&lt;br /&gt;
&lt;br /&gt;
== Portable Application Design ==&lt;br /&gt;
&lt;br /&gt;
Portable application design takes a different approach.&lt;br /&gt;
&lt;br /&gt;
Instead of targeting individual operating systems, the application targets a shared runtime or abstraction layer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
   Runtime&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
   Platform&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The runtime is responsible for adapting platform-specific behaviour.&lt;br /&gt;
&lt;br /&gt;
From the application&amp;#039;s perspective:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application Logic&lt;br /&gt;
       │&lt;br /&gt;
       ├── Windows&lt;br /&gt;
       ├── Android&lt;br /&gt;
       ├── iOS&lt;br /&gt;
       ├── macOS&lt;br /&gt;
       └── Linux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application Logic&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
     Runtime&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
 Supported Platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This significantly reduces duplicated development effort.&lt;br /&gt;
&lt;br /&gt;
== The Role of the Runtime ==&lt;br /&gt;
&lt;br /&gt;
A runtime acts as an intermediary between the application and the platform.&lt;br /&gt;
&lt;br /&gt;
Responsibilities may include:&lt;br /&gt;
&lt;br /&gt;
* File access&lt;br /&gt;
* Storage&lt;br /&gt;
* Networking&lt;br /&gt;
* Notifications&lt;br /&gt;
* Device integration&lt;br /&gt;
* Security&lt;br /&gt;
* Window management&lt;br /&gt;
* Rendering&lt;br /&gt;
&lt;br /&gt;
Conceptually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Platform-Neutral APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Runtime Environment&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Platform-Specific APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The application primarily interacts with the runtime rather than the operating system directly.&lt;br /&gt;
&lt;br /&gt;
== Common Portable Architectures ==&lt;br /&gt;
&lt;br /&gt;
=== Browser-Based Applications ===&lt;br /&gt;
&lt;br /&gt;
The browser is one of the most successful runtime environments ever created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Browser APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Browser&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The browser abstracts significant platform differences.&lt;br /&gt;
&lt;br /&gt;
As a result, a properly designed web application can operate on many operating systems with minimal modification.&lt;br /&gt;
&lt;br /&gt;
=== Progressive Web Applications ===&lt;br /&gt;
&lt;br /&gt;
Progressive Web Applications extend traditional web application capabilities.&lt;br /&gt;
&lt;br /&gt;
Additional features include:&lt;br /&gt;
&lt;br /&gt;
* Offline operation&lt;br /&gt;
* Background processing&lt;br /&gt;
* Local storage&lt;br /&gt;
* Notifications&lt;br /&gt;
* Installation support&lt;br /&gt;
&lt;br /&gt;
A PWA remains fundamentally a web application but gains application-like behaviour.&lt;br /&gt;
&lt;br /&gt;
=== Electron Applications ===&lt;br /&gt;
&lt;br /&gt;
Electron uses a bundled browser runtime.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Chromium&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Node.js&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Developers can create desktop applications using web technologies while maintaining a relatively portable codebase.&lt;br /&gt;
&lt;br /&gt;
=== Cross Platform Frameworks ===&lt;br /&gt;
&lt;br /&gt;
Modern frameworks provide platform abstraction while still producing native deployments.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Flutter&lt;br /&gt;
* React Native&lt;br /&gt;
* Avalonia&lt;br /&gt;
* Uno Platform&lt;br /&gt;
* .NET MAUI&lt;br /&gt;
&lt;br /&gt;
These frameworks seek to provide a balance between portability and native capability.&lt;br /&gt;
&lt;br /&gt;
== Designing Around Abstractions ==&lt;br /&gt;
&lt;br /&gt;
One of the most important architectural decisions is identifying which layer owns platform-specific behaviour.&lt;br /&gt;
&lt;br /&gt;
=== Poor Separation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
 ├── Windows Logic&lt;br /&gt;
 ├── Android Logic&lt;br /&gt;
 ├── iOS Logic&lt;br /&gt;
 └── Linux Logic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Over time, this approach often becomes difficult to maintain.&lt;br /&gt;
&lt;br /&gt;
Every new feature may require changes across multiple sections of the codebase.&lt;br /&gt;
&lt;br /&gt;
=== Better Separation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Service Layer&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Platform Adapter&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The application remains largely platform agnostic while platform-specific concerns are isolated.&lt;br /&gt;
&lt;br /&gt;
This approach improves:&lt;br /&gt;
&lt;br /&gt;
* Maintainability&lt;br /&gt;
* Testability&lt;br /&gt;
* Portability&lt;br /&gt;
* Long-term scalability&lt;br /&gt;
&lt;br /&gt;
== User Interface Considerations ==&lt;br /&gt;
&lt;br /&gt;
The user interface is often the most visible challenge in multi-platform design.&lt;br /&gt;
&lt;br /&gt;
Different platforms have different conventions.&lt;br /&gt;
&lt;br /&gt;
=== Native Experience ===&lt;br /&gt;
&lt;br /&gt;
Users generally expect applications to behave similarly to other applications on their chosen platform.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Menu placement&lt;br /&gt;
* Navigation patterns&lt;br /&gt;
* Input behaviours&lt;br /&gt;
* Accessibility features&lt;br /&gt;
&lt;br /&gt;
Ignoring platform conventions may create a poor user experience.&lt;br /&gt;
&lt;br /&gt;
=== Consistent Experience ===&lt;br /&gt;
&lt;br /&gt;
Some organisations prioritise consistency instead.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Office&lt;br /&gt;
* Adobe Creative Cloud&lt;br /&gt;
* Browser-based enterprise applications&lt;br /&gt;
&lt;br /&gt;
Users encounter similar interfaces regardless of platform.&lt;br /&gt;
&lt;br /&gt;
Both approaches are valid depending on business requirements.&lt;br /&gt;
&lt;br /&gt;
== Offline-First Design ==&lt;br /&gt;
&lt;br /&gt;
Modern multi-platform applications increasingly adopt an offline-first model.&lt;br /&gt;
&lt;br /&gt;
Traditional architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
    Server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Offline-first architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Local Data Store&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Synchronisation Layer&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
     Server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The application interacts primarily with local data.&lt;br /&gt;
&lt;br /&gt;
Synchronisation occurs separately.&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Improved responsiveness&lt;br /&gt;
* Better reliability&lt;br /&gt;
* Reduced network dependency&lt;br /&gt;
* Enhanced mobile support&lt;br /&gt;
&lt;br /&gt;
This design is increasingly common in mobile, cloud, and distributed applications.&lt;br /&gt;
&lt;br /&gt;
== Web Runtime Environments ==&lt;br /&gt;
&lt;br /&gt;
An emerging architectural pattern involves hosting applications within a dedicated runtime environment that implements or extends standard Web APIs.&lt;br /&gt;
&lt;br /&gt;
Conceptually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Standard Web APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Web Runtime Environment&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this model:&lt;br /&gt;
&lt;br /&gt;
* Applications target standard browser capabilities.&lt;br /&gt;
* Platform differences are handled by the runtime.&lt;br /&gt;
* Platform-specific implementations are hidden behind a consistent API surface.&lt;br /&gt;
* Applications remain largely unaware of the underlying operating system.&lt;br /&gt;
&lt;br /&gt;
This approach builds upon concepts previously explored by browsers, HTAs, AIR, Electron, mobile runtimes, and progressive web technologies.&lt;br /&gt;
&lt;br /&gt;
== Choosing The Right Approach ==&lt;br /&gt;
&lt;br /&gt;
There is no universally correct solution.&lt;br /&gt;
&lt;br /&gt;
The best architecture depends upon:&lt;br /&gt;
&lt;br /&gt;
* Target audience&lt;br /&gt;
* Supported platforms&lt;br /&gt;
* Performance requirements&lt;br /&gt;
* Security requirements&lt;br /&gt;
* Offline requirements&lt;br /&gt;
* Team expertise&lt;br /&gt;
* Budget constraints&lt;br /&gt;
* Long-term maintenance goals&lt;br /&gt;
&lt;br /&gt;
A useful guideline is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Target the highest level of abstraction that still allows the application to meet its requirements.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This often produces the best balance between portability, flexibility, and maintainability.&lt;br /&gt;
&lt;br /&gt;
== Common Misconceptions ==&lt;br /&gt;
&lt;br /&gt;
=== Portable Means Less Powerful ===&lt;br /&gt;
&lt;br /&gt;
Portable applications can often provide capabilities comparable to native applications.&lt;br /&gt;
&lt;br /&gt;
The difference usually lies in the abstraction layer rather than the application&amp;#039;s functionality.&lt;br /&gt;
&lt;br /&gt;
=== One Codebase Solves Everything ===&lt;br /&gt;
&lt;br /&gt;
A single codebase may reduce duplication, but architectural complexity still exists.&lt;br /&gt;
&lt;br /&gt;
Platform differences do not disappear simply because they are hidden behind a framework.&lt;br /&gt;
&lt;br /&gt;
=== Native Is Always Better ===&lt;br /&gt;
&lt;br /&gt;
Native applications provide advantages in some scenarios.&lt;br /&gt;
&lt;br /&gt;
However, portability, maintainability, deployment simplicity, and development speed may be more important than maximum performance.&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* Multi-platform application design requires balancing portability and platform integration.&lt;br /&gt;
* Platform-specific applications provide maximum control but increase complexity.&lt;br /&gt;
* Portable architectures reduce duplication through abstraction layers and runtimes.&lt;br /&gt;
* Browsers are among the most successful runtime environments ever developed.&lt;br /&gt;
* Modern frameworks continue the long-standing industry goal of write-once, run-anywhere software.&lt;br /&gt;
* Offline-first design is increasingly important in modern application architectures.&lt;br /&gt;
* Successful architectures separate application logic from platform-specific implementation details.&lt;br /&gt;
* The best solution is usually the simplest architecture that satisfies the application&amp;#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Applications Demystified]]&lt;br /&gt;
* [[The Evolution of Application Delivery]]&lt;br /&gt;
* [[Progressive Web Applications]]&lt;br /&gt;
* [[Cross Platform Development]]&lt;br /&gt;
* [[Runtime Environments]]&lt;br /&gt;
* [[Offline First Design]]&lt;br /&gt;
* [[Application Architecture]]&lt;br /&gt;
* [[Web Runtime Environments]]&lt;br /&gt;
* [[Software Portability]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
</feed>