Tech Tuesday – Portability: Software For The Masses!
21 March 2017 |
David Jenkins | About a 5 minute read
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”).
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.
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 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!
- Bringing Portability to the Software Process: http://www.cs.wvu.edu/~jdm/research/portability/reports/TR_97-1.pdf
- Software Portability: Weighing Options, Making Choices: https://www.questia.com/magazine/1P3-1383856731/software-portability-weighing-options-making-choices
- Understanding Your Mobile Application Development Options: https://developer.salesforce.com/page/Native,_HTML5,_or_Hybrid:_Understanding_Your_Mobile_Application_Development_Options
With thanks to Daniel Rodriguez and Gary Perry for their contribution!Read More From This Author
React Native Engineer (London)
Champion software quality and technical vision for AND and our clients, work on large-scale projects and help junior and mid developers grow in their roles.
Technologies you will be using
Tech Lead (Reading)
Bring your expert tech knowledge to the table to influence the direction of projects, whilst coaching and your team through engineering best practices.I'm Interested
DevOps Lead (Reading)
Bring your delivery expertise to the table, leading the pack as ambassador on operational requirements, influencing and continuous development.I'm Interested