Working under the direction of Jason Nieh, professor of computer science at Columbia Engineering, five students—all PhD candidates—have developed Cider, a new system that can run iOS apps on an Android device for the first time. Their research was presented at the Proceedings of the 19th International Conference on Architectural Support for Programming Languages and Operating Systems earlier this spring.

“We came up with some novel techniques, compile-time code adaptation and diplomatic functions, that make it possible for the first time to run iOS apps natively on Android,” says Nieh, who also is a member of the Cybersecurity Center at the University’s Institute for Data Sciences and Engineering. “Users no longer need to be locked into one platform. Being able to write an app once and run it anywhere has been a long-sought-after goal and a very hard problem to solve.”

As anyone who has an Android phone or tablet knows, there are all kinds of cool iOS apps that they cannot run, like iTunes and iMessage. On desktop computers, one can use virtualization products such as VMware, which runs Windows apps on Macs, but those approaches do not work for mobile devices. So Nieh’s team came up with a new way to break down the walls between iOS and Android and let users run both iOS and Android apps together on the same device.

They used compile-time code adaptation, a new method they developed to import unmodified code from other operating systems into Linux so that they could reuse that code with minimal implementation effort. “We came up with another technique involving diplomatic functions, so that we could replace iOS system functions with equivalent Android functions and have the iOS app call the Android functions instead to access Android hardware,” says Naser AlDuaij, who worked under Nieh’s supervision with fellow students, Jeremy Andrus, Alexander Van’t Hof, Christoffer Dall, and Nicolas Viennot.

Virtualization solutions rely on hardware standards to virtualize, Nieh explains, but mobile platforms are vertically integrated platforms that lack the hardware standards of the PC world, making traditional virtualization solutions difficult in the mobile space. Hardware components are integrated together in compact devices using non-standard interfaces. Software is customized for the hardware, often using proprietary libraries to interface with specialized hardware. Apps are tightly integrated with libraries and frameworks, and often only available on particular hardware devices: “So user choices are very limited and innovation is stifled,” Nieh notes.

While researchers have developed approaches such as Wine, for example, to run Windows apps on Linux, these involve complex reverse-engineering and reimplementing the entire Windows API (the application programming interface which specifies how some software components should interact with each other), even requiring reproducing its bugs.

“This method is a herculean and unfinished effort,” says Van’t Hof. “In contrast, we reused existing iOS frameworks and libraries in our approach, avoiding the difficult and complex reimplementation effort of Wine.”

Nieh and his team hope that their Cider project spurs more research in mobile-centric cross-platform standards and integration. This could be in the area of mobile virtualization, binary (or OS) compatibility, or even more higher level API standards that make it easier for entrepreneurs to leverage existing mobile apps markets.

“Mobile computing has become a huge part of our lives,” Nieh adds, “and I think consumers deserve to be able to maximize the technological benefits without having to cart two or more devices around.”