Truly native apps do have a special place in my heart, though. When software is lovingly crafted to work in perfect harmony with the operating system and its native UI, the user experience can be honed to perfection.
In the end, it is a balancing act: one must choose which parts can work adequately as cross-platform code, and where costly OS-specific features are crucial for the UX.
I don't even understand how lagrange can be this good on Android when it wasn't even an Android native app to begin with, so I have no idea how skyjake managed to pull this off.
The answer is "with a lot of effort". I've been working on the mobile variant of the app for almost a year now, parallel to the desktop version. This is one of the unbeatable advantages of a fully custom UI — you can mutate it without restrictions and have wholly different device classes, running completely different operating systems, supported by the same code.
There was some discussion about Lagrange and Gemini on Hacker News about a month ago, which I totally missed at the time.
As always, a developer tried to reinvent the wheel and make their own pseudo-GUI library. As always, accessibility was promptly forgotten.
I understand the frustration. In the modern world, being able to use computers and mobile devices is a key part of being a member of society. If your vision or motor skills are impaired to the point that it hinders using a device, accessibility features are crucial to you.
It is a perfectly valid criticism that accessibility is lacking in Lagrange, and it's completely tied to the use of custom GUI. For all its benefits, enabling the app to be truly cross-platform across desktop and mobile operating systems, it means that none of the vendor-specific accessibility APIs can be used directly. It is beyond the resources of a single developer — working on their leisure time, no less — to support the completely different APIs provided by Microsoft, Google, Apple, GNOME/Qt, and other free software alternatives. The only reasonable choice here would be to use the native GUI frameworks of each platform, and have multiple different variants of the app. It is possible to do it, but in practice requires a team of developers.
The practical and technical reasons notwithstading, it does feel wrong to exclude a group of users. Doubly so when these users are facing challenges living in a world designed mostly by and for fully-sighted and physically-unimpeded people. For Lagrange, this remains a problem to be addressed one way or another, but as stated above, it will be a costly issue to tackle. In the meantime, at least there are other clients available, and some of them may fulfill one's needs via the use of native GUI frameworks.
By choosing a target audience for an app, developers are also implicitly choosing who they are excluding from the audience. If one were to write an iOS app with perfect accessibility support, you'd still exclude all the Android and PC users, regardless of their needs for accessibility. Is it ethically worse to exclude people based on their physical abilities than their OS preference and financial background? Even if the difference in audience sizes is order(s) of magnitude larger? One faces this kind of conundrums when developing cross-platform software.
The Open Accessibility (A11y) Group functions today within the Linux Foundation to establish free and open standards that enable comprehensive universal access to various computing platforms, applications, and services.
The real solution for cross-platform apps would be to rely on an open standard for accessibility APIs, much like there are open standards for other technologies like GPUs. But what incentive is there for large corporations like Apple and Google to ever embrace such open standards? Their incentives go against cross-platform apps, as they provide no added value to their respective proprietary platforms. We are stuck in the limbo of web apps and multiple native APIs, and no way to implement comprehensive accessibility support without the substantial investment of development time and/or becoming dependent on a particular operating system.
🏷 Programming, Lagrange