Zinstall has been working for more than a decade to provide backup and migration facilities for users to protect their data. Along with a lot of other Windows developers, they ported their application Zinstall Fullback to run natively on Windows on Arm (WoA) machines such as the Surface Pro X. Zinstall Fullback is a backup tool which allows both backing up Arm devices, as well as migrating data to an Arm device from a different device.
Due to high customer demand, Zinstall began porting their application to WoA. Unlike most other apps, which can run via the emulation layer of WoA, Zinstall Fullback required access to lower-level components which were inaccessible through emulation. This meant most of the application had to be ported over to run natively on WoA machines. The user interface (GUI) parts of the application were kept as emulated parts as the performance for that part is restricted by user speed rather than the emulation layer. Parts that can be emulated without losing performance don't add much to the end result. This split was made possible due to their application already using a well-implemented modular design, allowing parts to be modified without affecting the others.
An important step in the porting process is to get your environment in order. This means setting up everything that you need to compile, build, and deploy for Arm. Even if just for a “dummy” application, such as a “Hello World” style program as suggested by Zinstall. Once that is working, you can start adding the actual code. For most people creating user mode programs, setup is as easy as opening Visual Studio, changing the target platform and hitting compile. With driver development such as the work involved in porting Fullback, adaptation is significantly more complex. For WoA driver development you need to use the Windows Driver Kit and Visual Studio 2019, which require a move away from old tools like nmake.
Once your application nears completion, it is also important to remember to modify the installer instructions since WoA machines install files in different locations to other machines. Having the location incorrectly set will cause the application to break.
Most of the time spent porting was on the hardware-specific instructions since these could not be emulated. As the emulation is all done on the software level through WOW64 rewriting the assembly code, access to drivers and hardware is not available for emulated programs. Zinstall Fullback makes use of compression and encryption as part of its features, both of which need access to drivers and the ability to use their own assembly code. This meant they needed to port these parts of the application across fully for the best performance. While they spent most of their time on this section partly due to needing to learn the appropriate assembly, they explained to us that it was easier than they had expected. This meant that the port was a smooth process.
The process was the same for their hardware-driven functionality, such as their hardware-accelerated encryption. This had to be fully ported to run on WoA as it was not possible to rely on the emulation.
Zinstall described how they made the port more manageable for these sections by first replacing the compression, encryption, and other functions with higher-level substitutes. This enabled them to slowly incorporate the WoA specific bits back in over the course of the project. This also made it easier for them to go back and optimize the program once it was functionally complete.
When they were done, Zinstall noted that they were fully able to achieve feature parity on the WoA version of Fullback. They were also surprised to find that the WoA version had an extra feature. WoA machines continue to run when in sleep mode, albeit very slowly, instead of being paused like other systems. This meant that the software could continue to operate while the machine was sleeping – something that is useful to have on long processes like backing up important information.
Overall, Zinstall found the experience with adapting to WoA very smooth, and much easier than they had expected, costing them less time and effort than anticipated. They suggested developers keep emulation in parts that will not benefit from the performance increase, since they found the emulation to be more than good enough for the user-input component of Fullback.
[CTAToken URL = "https://developer.arm.com/solutions/os/windows-on-arm" target="_blank" text="Windows on Arm resources" class ="green"]