Article

Tech Tuesday – Portability: Software For The Masses!

21 March 2017 | David Jenkins | About a 5 minute read
Tags: computer, devices, portability, portable, programmes, Software, tech


Here at AND Digital portability is really important to the way we build products for our clients. We’ve got a really diverse range of clients and with that, comes a varied user base consuming software on many different platforms, operating systems and environments. To make sure we generate as much benefit for our clients as possible we need to make sure we are catering for as many of their customers as possible.

 

So what is portability?

Portability isn’t just about being able to move around or transport something with ease, it also applies to computer programmes (not just dogs in cardboard boxes which is a picture that actually appears if you Google Image search for “software portability”).

resizedimage318316-software-testing-company-136-min_zpsw0sehpkx

 

Portability in high-level computer programming is the capability that software possesses to be run on different platforms or environments. It means the codebase does not have to be changed or added to when the software is moved to a new platform.

 

And why should I be bothered?

Throughout the history of computers one of the biggest challenges has been incompatibility between different operating systems and hardware architectures, with programs written for one computer not working on others. In today’s hyper connected world the drawbacks of this are apparent; it limits the amount of users that can use your application, leads to inconsistent user experiences across platforms/devices and it can drive up the price of development as you need multiple teams for multiple target environments. By developing software to be portable between different platforms and environments we can expose it to as many users as possible, ensure a consistent user experience across platforms/devices and hopefully make some cost savings during development.

 

Ok, so what is involved?

Portability for software typically involves “porting” it to different platforms from the one it was originally written for. It is the process of adapting executable software to be used on platforms that are different from the one for which it was originally designed. Porting is directly related to software portability; it is said that the lower the cost of software porting, the more portable the software is. Software porting is only effective when the cost of porting software to a new platform is less than writing the software from scratch. The value/number of the users you are trying to reach on the new platform should also be considered.

To test raw application portability you can transfer installed program files or try reinstalling a program from distribution files on another computer of the same architecture.

 

Can I see some different examples of portability and applications?

The graphic below demonstrates the three broad levels of portability. Websites are highly portable as they can pretty much run on any web browser on most OS’s.

pasted image 0

A hybrid native application is fairly portable as there is a base layer specific to the device/OS it is running on, but then pulls down webviews that are generic to any version of the app. This can be a very cost effective way of building an application and getting it out to a large number of users across different ecosystems. Instagram is a great example of a hybrid application. It is a webapp on browsers, but can be downloaded from the Google and Apple stores where it is a hybrid application. As an app it is then a container to view the webapp efficiently. The main problem with a hybrid native application is performance and optimisation. Since the bulk of the application is written independent of the system it operates on, it can be very hard to optimise.

Pure native applications are written exclusively for a specific platform, the code needs to be ported, or rewritten, to work on a different platform. The Microsoft Office suite (not the web version) is a good example of a pure native application, even to the point where the features and functionality actually vary slightly according to what platform you run the programs on.

 

What about portability in practice?

There are now applications, like Docker, which give teams the ability to leverage any infrastructure; the cloud, VMs or baremetal servers. They run applications in exactly the same way as other environments by facilitating the installation and/or configuration to different projects. This is can be extremely helpful for JavaScript projects (when using other languages as well) because sometimes there are hundreds of different install dependencies across versions.

Another great example of portability in the JavaScript world is the use of Phonegap/Cordova. This is a library used to compile JavaScript applications into mobile apps (Android, IOS and Windows phone). These are not native applications (they are hybrid applications because they are running in a webview) but can still access the different features of devices like the camera, calendar, contacts, etc. By utilising Phonegap/Cordova it is possible to start with a normal JavaScript application made for desktop and convert it to a mobile OS. This can help streamline development and costs as the only languages needed are JavaScript and HTML5.

There are some new technologies which aim to make this process completely native, for example NativeScript or React Native, in order to increment performance thus avoiding a high number of bugs. Having multiple native versions of an app means more bugs as they can be specific to OS and even device model.

 

Want to know more about portability?

There are some links below that provide some more in-depth analysis and discussion on portability. Happy reading!

 

With thanks to Daniel Rodriguez and Gary Perry for their contribution!

Read More From This Author

Share this blog post

Related Articles

Careers

We’re looking for bright, dynamic people to join our team!

Discover More Roles