feature article
Subscribe Now

The Road from Java

Universal Portable Software Isn’t Doing Anyone Any Favors

“The test of a first-rate intelligence is the ability to hold two opposed ideas in mind at the same time and still retain the ability to function.” – F. Scott Fitzgerald

Watch any children’s TV show, from Daniel Tiger on your Roku to 30-year-old reruns of Sesame Street on VHS tape, and you’ll hear two messages loud and clear. One: We’re all the same. And two: We’re all different, unique, and special.

Which is it? And how do little kids reconcile these diametrically opposed viewpoints?

The same irreconcilable dichotomy exists in software development. Are all platforms the same, or are they all different? Can we have it both ways? Can we even entertain both suggestions in our heads at the same time?

From a programmer’s point of view, it would be great if all hardware platforms were the same. Same processor, same memory structure, same hardware peripherals, same debug environment – same everything. Programming any type of device would be like programming any other. You’re coding a thermostat one day and a nuclear submarine the next. Piece of cake. It’s just ones and zeros.

On the other hand, we want all devices to be different. An iPhone has different hardware resources than a web server, which is different from Watson or Deep Blue. Seems natural. Nobody wants a single, state-sanctioned, “approved” hardware platform that we all have to work around. Let creativity reign!

To reconcile these opposing demands, we have… fairytales. Mythological fantasies wrapped up in marketing hype (and hope), passed along as technical innovation. The hero of these stories is called the “portable application,” armed with a magically enchanted “virtual machine.”

It all sounds so lovely. We write an application once and it miraculously runs on anything and everything. No rewriting necessary. No pesky platform-dependent debugging. Heck, you don’t even have to know how big the target screen is – or whether it even has a screen – or whether there’s a mouse, or a keyboard, or a touchpad, or Wi-Fi… or anything! It’s all handled by the Fairy Godmother of universal virtual platform independence. Poof! Your wishes have all been granted.

These fantastical devices have gone by a lot of different names, from Java to Microsoft’s Universal Windows App (UWP) framework. They all promise more or less the same thing: write one program and watch while it runs on various types of hardware, including devices you’ve never seen or that haven’t been invented yet.

Trouble is, it doesn’t work. And it shortchanges the customer, which is an even bigger sin. Portable apps don’t really do anything for the end user; they’re a carrot on the end of a stick for the developer.

Portable Java code or UWP apps attempt to make themselves universal by creating a cocoon around themselves, an imaginary virtual machine hosted on a real machine, thereby abstracting away the messy details of the actual hardware. That’s an interesting academic concept, sort of like a simulation model, but it should end there. Nobody tries to actually ship the simulation model to customers. It’s supposed to be a development tool, not the actual product. Portable apps try to abstract away the usefulness of actual native code.

Take UWP. The idea is that Universal Windows Apps will run on a PC and a Windows Phone and an Xbox (and presumably future Windows-based devices), all without modification. The APIs allow you to ignore the existence of an Xbox controller, or a PC’s keyboard, or a smartphone’s touchscreen, among other things. So from the get-go, you’re ignoring the features that make each device unique. The very features, in fact, that probably helped it get sold in the first place. Who wonders, “Gee, should I get an Xbox or a smartphone? Doesn’t matter – they’ll run the same apps!” That’s like treating a bicycle and an airliner as interchangeable because, hey, they can both get you from San Diego to Portland.

Abstracting away the hardware differences seems like exactly the wrong thing to do, from a customer’s perspective. Why did I buy Device X if the software for it deliberately ignores the features and functions that make it unique? Why offer 31 flavors if they all taste like vanilla?

Universal programming models do more than just ignore unique features. They actively prevent their use. Microsoft’s UWP guidelines suggest that you’re welcome to write UWP apps for a specific platform (a Windows PC, for instance). But that doesn’t make the PC features any more accessible. UWP apps still don’t have access to the PC’s file system. They can’t run at startup, which PC programs have been able to do for, oh, 35 years. Drag and drop is severely limited. You can’t take advantage of dual graphics cards. In fact, your GPU drivers may not work, and your 3D tweaks will likely crash. Playing PC games? Good luck with that, because UWP abstracts away the stuff that makes a PC good for gaming, on the grounds that – boo hoo – they might not be available on other UWP platforms. The phrase “lowest common denominator” comes to mind. 

The other is “one size fits all.” Remember when that used to be a good thing? Now it’s deployed only in sarcastic mode, slamming products that are poorly constructed and not well suited to their purpose. Hello, universal applications, the cheap suit of the 21st Century.

Portable applications rely heavily on sandboxes – sequestered bits of virtual machine isolated from the real computer for safety and portability. They are, almost by definition, limited and with incomplete access to the hardware and the operating system. They’re baby-safe spaces with no sharp corners. It’s supposed to make them (and the apps they contain) safe. But it also makes them rubber-padded playgrounds. Instead of buggy (or malicious) code secretly infecting the host machine, it just asks permission instead. Click-fatigued users will blithely accept any request that an app pops up. Can you access my camera? Sure. My wireless network? Go ahead. My contact list? Go for it. And so on… The universal app is just as harmful as before. But now you get to blame the customer for it.

The very existence of sandboxes for anything other than testing underlines their limitations. What, your software is so unreliable that it has to be caged?

Even little kids know that it’s important to be able to play well with others. And that, while we all share certain basic traits, we also have important differences from one another. If “variety is the very spice of life, that gives it all its flavor,” then celebrate those differences. Don’t be like the mindless drones in the “1984” commercial. You didn’t choose your favorite products because they were bland and unremarkable. Don’t peddle vanilla when you can provide the spice. 

10 thoughts on “The Road from Java”

  1. I strongly disagree here mostly because the flip side is so wrong and this negates a basic tenet of computer which is further abstraction.

    I’m currently using Java (specifically Codename One) to build a mobile app and I’m pretty happy with it. Is it perfect?

    No. But it’s WAY better than the alternative of Objective-C or Swift for iOS, Android’s weird set of API’s/Tools & Windows technology du jour.

    Pretty much every game uses Unreal or similar Write Once Run Anywhere tools. It’s rare to see a game that isn’t written using such tools today.

    Java worked really well in the desktops in the day, yes there were MANY awful apps because people often use WORA to save on costs and then also save on design and engineering but that’s a project problem not a tool problem.

    While devices are precious little unique snowflakes they are still converging and today’s Android/Windows apps are far more similar to iOS apps than ever before. I’m talking about natively written apps.

    I haven’t seen a single tool that promises to target a watch with the same code you use for a phone and pretty much every tool (whether WORA or native) expects you to adapt your UI to tablets so I don’t see what you are driving at here.

    I think you looked at some badly written apps and concluded the tool is broken rather than the logical conclusion:

    1. The tools are immature.
    2. Developers use them to save money and build mediocre apps with them.

    When targeting native you might as well go all the way down to ASM. But I’m assuming you don’t. You follow the same trend of abstraction this industry has followed since its inception so these tools will take over because the need is big, obvious and growing.

  2. I wont go into the above too much. I ranted on this a few years back. I still think Java is useful and being used today.

    Recently I’ve been exploring the Unity3D Game engine for gui applications and demos that can run on many platforms. It’s geared toward games, but is so much more. There’s Oculus Rift api being used as we speak.
    By adding usb/serial or ethernet etc interfaces, you can interact with other embedded devices to make a more immersive environment. One guy I just read about now plays a scary game he developed and the lightning flashes within the game are enhanced with real world strobe lites.

    I can import a 3D model of a new product idea and interact with it when presenting to a customer. This is the way of the future!

  3. I find that – particularly with game engines like Unreal and Unity, portability is not one of the biggest benefits. Those engines bring incredible amounts of high-level capability to the app (3D renderers, physics engines, etc.), and I’d estimate they reduce engineering effort by 1-2 orders of magnitude.

  4. Agreed to all your points! it is a powerful graphics engine and fun.

    My newcomer benefit is that in writing a single unity code base that, with minor issues, the Unity code will build for multi-platform targets using unity kernel for each platform so that is similar to java’s goal. I can’t wait to get an VR set like Occulus-Rift or similar. I like that there is a huge forum and fan base for support. They did recently drop javascript( really a subset called unityscript ) in the intellisense for MonoDev and VisualStudio so I code mostly in C# now.


    For example: I can make a Home automation widget that shows my house in interactive 3D, click-zoom on items to control, from both my phone, PC, or Mac that looks the same across. Best Regards guys -Lee

  5. Pingback: binaural
  6. Pingback: day trading
  7. Pingback: zd porn
  8. Pingback: Aws Alkhazraji

Leave a Reply

featured blogs
Sep 21, 2023
Wireless communication in workplace wearables protects and boosts the occupational safety and productivity of industrial workers and front-line teams....
Sep 26, 2023
Our new AI-powered custom design solution, Virtuoso Studio, leverages our 30 years of industry knowledge and leadership, providing innovative features, reimagined infrastructure for unrivaled productivity, and new levels of integration that stretch beyond classic design bound...
Sep 21, 2023
At Qualcomm AI Research, we are working on applications of generative modelling to embodied AI and robotics, in order to enable more capabilities in robotics....
Sep 21, 2023
Not knowing all the stuff I don't know didn't come easy. I've had to read a lot of books to get where I am....
Sep 21, 2023
See how we're accelerating the multi-die system chip design flow with partner Samsung Foundry, making it easier to meet PPA and time-to-market goals.The post Samsung Foundry and Synopsys Accelerate Multi-Die System Design appeared first on Chip Design....

Featured Video

Chiplet Architecture Accelerates Delivery of Industry-Leading Intel® FPGA Features and Capabilities

Sponsored by Intel

With each generation, packing millions of transistors onto shrinking dies gets more challenging. But we are continuing to change the game with advanced, targeted FPGAs for your needs. In this video, you’ll discover how Intel®’s chiplet-based approach to FPGAs delivers the latest capabilities faster than ever. Find out how we deliver on the promise of Moore’s law and push the boundaries with future innovations such as pathfinding options for chip-to-chip optical communication, exploring new ways to deliver better AI, and adopting UCIe standards in our next-generation FPGAs.

To learn more about chiplet architecture in Intel FPGA devices visit https://intel.ly/45B65Ij

featured paper

Intel's Chiplet Leadership Delivers Industry-Leading Capabilities at an Accelerated Pace

Sponsored by Intel

We're proud of our long history of rapid innovation in #FPGA development. With the help of Intel's Embedded Multi-Die Interconnect Bridge (EMIB), we’ve been able to advance our FPGAs at breakneck speed. In this blog, Intel’s Deepali Trehan charts the incredible history of our chiplet technology advancement from 2011 to today, and the many advantages of Intel's programmable logic devices, including the flexibility to combine a variety of IP from different process nodes and foundries, quicker time-to-market for new technologies and the ability to build higher-capacity semiconductors

To learn more about chiplet architecture in Intel FPGA devices visit: https://intel.ly/47JKL5h

featured chalk talk

Quick Connect IoT
Sponsored by Mouser Electronics and Renesas
Rapid prototyping is a vital first element to get your next IoT design into the real world. In this episode of Chalk Talk, Brad Rex from Renesas and Amelia Dalton examine Renesas’ new Quick Connect IoT out of the box IoT solution that combines well-defined API and middleware with certified module solutions to make rapid prototyping faster and easier than ever before. They also investigate how the Quick Connect IoT integrated software can help MCUs, sensors and connectivity devices communicate effectively and how you can get started using Quick-Connect IoT for your next IoT design.
Oct 31, 2022