Ask Slashdot: What Would Happen If All Software Ran On All Platforms?
Slashdot reader dryriver writes:
We live in a computing world where the OS you use -- Windows, OS X, Linux, Android, iOS, others -- often determines what software can and cannot be run on a given electronic device. (Let us pretend for a moment that emulators and other options don't exist). What if -- magically -- such a thing as as Universally Compatible Software Application were possible. Software, in other words, that is magically capable of running on any electronic device equipped with enough CPU, GPU and memory capacity to run the software in a usable way.
Example: 3D CAD software that runs on Windows 14, Playstation 7, an Android Smartphone, Nintendo's latest handheld gaming device and an Ubuntu PC in exactly the same way with no compatibility problems whatsoever occurring. What would and would not change in such a computing world?
He also asks an even more important question: will this ever be possible or feasible from a technical standpoint? So leave your best answers in the comments. Will it ever be possible to run all software on all platforms -- and what would happen if we could?
Example: 3D CAD software that runs on Windows 14, Playstation 7, an Android Smartphone, Nintendo's latest handheld gaming device and an Ubuntu PC in exactly the same way with no compatibility problems whatsoever occurring. What would and would not change in such a computing world?
He also asks an even more important question: will this ever be possible or feasible from a technical standpoint? So leave your best answers in the comments. Will it ever be possible to run all software on all platforms -- and what would happen if we could?
We've already got that. It's called Java.
This is your sig. There are thousands more, but this one is yours.
with all the virtualization stuff, remote desktop and more... well, I think it isn't a problem
Of course it's technically feasible. It's called universally agreed upon standards and conventions.
CLI paste? paste.pr0.tips!
If software was universally compatible and behaved the same way on all devices, it would be a security nightmare as it would have to implement all the security holes and other bugs of every platform to do so. So say Windows has a zero-day exploit in URL handling and Linux one for file handling. This universal code would have to reimplement the Windows bug in Linux and the Linux bug on Windows, or the two versions of the program would behave differently. If that isn't what you're talking about then you're talking about Java.
Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
For highly cpu and memory intensive applications I don't see how this would work. The vast majority of software runs at only a few percent of what a CPU is capable of mostly waits on IO. However for HPC applications the memory and processing usage are often tuned down to the cache line level and that pretty much requires low level access to the system.
Even more extreme are things like BLAS which is tuned to different cpu archs. Running an optimized BLAS vs unoptimized BLAS is usually 10x the performance or more and having a simulation go from a month to 10 months would not be acceptable.
Computer modeling for biotech drug manufacturing is HARD!
And the situation is back to the current state.
One question is if this really is desireable...
A lot of software require specific hardware to run in any usable way (3D, high end gaming), so what would be the benefit of running it on underpowered hardware?
The same thing that happened during the mainframe days, when we could use all sorts of terminals and terminal emulators we wanted.
We would bitch about the speed.
I would have woke up, thinking it'll be the best idea ever. Only to find out, it's called a web app.
Of course it's technically feasible. It's called universally agreed upon standards and conventions.
And webapps are slowly exactly becoming this.
"Sufficiently advanced satire is indistinguishable from reality." - [Tips: 1DrYakQDKCQ6y52z6QbnkxHXAocMZJE61o ]
The problem with something like this always comes down to the fact that applications have to be coded to the lowest-common denominator of functionality of all platforms. That's the situation both Java and Web apps tend to find themselves in.
Does your OS have some cool notifications subsystem that other platforms don't have? The universal app can't use it (or if it does only for those platforms that support it, it's hardly running identically on every platform anymore). Or how about if your hardware has something fancy like Apple's new Touch Bar? Can't use that either.
This is the problem we always see with desktop Java applications. They can typically do well with the basics, but if you want to tie-in to some stand-out feature that isn't available on every platform, you're generally SOL (unless you want to rely on JNI, and perhaps filling in missing functionality on other platforms with custom native libraries I suppose -- but again, that's not exactly cross-platform code, and requires a ton more work.). With web apps we see a similar issue; you're constrained by what the various standards allow, and can only escape that with plug-ins.
We also see this in the video game console world. Sony did some really cool things with the PlayStation 4, like adding the touchpad to the controller, the programmable-colour LED array on the back of each controller, and the second screen functionality that allows you to use a tablet or phone as a wireless secondary information display. Unfortunately, most cross-platform games tend to ignore these features (to varying degrees), as they're simply not available on the PC or Xbox One.
In the world you describe, there really wouldn't be any ability for anyone to stand above the crowd with new special OS or even hardware features (beyond maybe some low-level performance tweaks), because as soon as you did so, you would be incompatible, and either nobody would use it, or you'd have to permit all of your competitors to also implement your new feature.
This reminds me somewhat of the following example: OS/2 ran Windows 3.x programs better than Windows 3.x did. It could pre-emptively multitask Windows 3.1 applications at a time when Windows itself couldn't, and a single errant Windows application could bring down the whole system, or fail to yield() and simply take up all the processing time for itself. Because of this, too many big development companies simply targeted the lowest-common denominator and wrote Windows 3.1 code for use on OS/2 (WordPerfect is a great example -- they went out of their way to tout OS/2 compatibility, but in reality their OS/2 version was the Windows 3.1 version with some OS/2 templates and WPS integration tools slapped on top of it). And we all know what happened to OS/2 (or I suppose I presume we all know -- I guess you could be 16 or 17 years old and not know what happened back then. When did I start getting so damned old???)
Yaz
Ok, that was the words. What it would mean to have the exact same software in all platforms is that someone could build a truly universal syncronizing platform.
This means that you could seamlessly move not just your files, but also the running sessions of your applications using a single protocol, instead of depending on individual per-app hacks or remote terminals. You could copy the content to your device, edit it with local apps and return it to the server. Just like git version control, but for all kind of content and work sessions, not just code.
Singularity: a belief in the "God" idea with the "demiurge" relation inverted.
3D CAD software that runs on Windows 14, Playstation 7, an Android Smartphone, Nintendo's latest handheld gaming device and an Ubuntu PC in exactly the same way with no compatibility problems whatsoever occurring. What would and would not change in such a computing world?
Confusing operating systems and devices is a problem here. The devices (desktop computer, Playstation 7, an Android Smartphone, Nintendo's latest handheld gaming device) should all be capable of running the GNU operating system, which you may know by another name (Linux, OSX, Ubuntu, but *not* Android, and probably not iOS).
We already have a standardised set of software that runs on pretty much every platform, and it gives us the wonderful plasticity and variety in our technological world today. The problem is not that it doesn't exist; it's that people (and corporations) are apt to make their own solutions and encourage the use of software that doesn't work everywhere.
Ask me about repetitive DNA
I've been doing web stuff for a decade, pretty much since the whole Web 2.0 thing was a fad. It pays the bills, but I always ask myself: why are we doing this to ourselves? HTML was originally a document format, not an application framework, and dear god does it show. From the kludges that we tacked on to maintain state to the horrifically bad data serialization/transfer methods. All of this stuff was solved decades ago with simple network aware applications. Yet here we are in a world where PHP, of all things, is one of the best programming languages for networked applications for the simple fact that its built-in comparison operators map so well to the (equally crappy) HTTP variables.
I don't know how to get out of this trap, but dear lord I wish somebody would figure it out.
... I have a pretty clean idea of what will happen in MY workplace. Different users will ask to have back their old software that were forced to dismiss for compatibility reasons. Why? Because changing a software every DECADE is seen as a trauma, users are so used to a specific piece of software (and version) that every change is seen as a setback. Management will reject every proposal from the IT guy (it's a small firm) because old software "is good enough", newer software "cost money" and ever free alternative software is seen as "unnecessary and more troubles than benefits".
If you look at new versions of Windows/OS X/Linux, you get new APIs like UWP, DirectX 12, Xcode, Metal, systemd, Vulkan and so on. The only way "everything could run on everything" would be if every OS-level API was available on every platform. And that closed source software is compiled for every instruction set, but I'll assume they'd do that. In theory it's not hard, it's just making a free cross-platform standard like POSIX or Java or Vulkan. That however ignores the practical reality that these companies are competing. They don't want to comply with a standard if they can make more money if they don't by adding more features or being more flexible to change or simply to not be compatible.
That the standard is there also doesn't mean the resources to implement it will be there. For example, for a long time Mesa's OpenGL implementation was ~5 years behind the latest official version. Now it has caught up but it didn't happen by itself, only through big resources from Intel and to a lesser degree AMD. The WINE project can read the programming API for DirectX, doesn't mean a compliant implementation will appear from nowhere. And sometimes there's plain old disagreement like when Google forked the Linux kernel to do wakelocks or the systemd vs non-systemd debacle. So in practice it's pretty hard.
That said, to shine some light in an otherwise glum post it usually converges slowly once the API is sufficiently settled. For example take USB device classes, it standardized many common hardware devices to the OS. If you don't have lots of vendor-specific parameters to set the user API can be standard too. This is a keyboard, this is a mouse, this is a memory stick etc. and you don't need a specific driver for every piece of hardware. You have libraries like Qt too, write towards it and it should run on Windows/Mac/Linux. Containers and such might also make it easier, heck doing a web application is a common way to make it run everywhere... it's happening in many ways but it'll still take decades.
Live today, because you never know what tomorrow brings
The user interfaces for different platforms have to be different. Otherwise you end up with Skype 7.x, where we have a UI on the desktop which has been designed for a smartphone.
Low pointing accuracy on smartphones means large targets and huge icons. Short conversations on smartphones means lots of space wasted on speech bubbles. Likely content on smartphones means emojis pop up when you're sharing code snippets, making them unreadable. Restricted input methods on smartphones means ignoring platform conventions like Ctrl+B for bold text.
Conversely, try getting 3DS Max 2017 UI onto a smart watch. Regardless of compatibility, it's simply impossibe.
Sean Ellis
Follow OfQuack's antics on Twitter.
That WAS the case around 1998! Nokia phones had a Java virtual machine. Linux had one. Windows and Mac had one. It was universal. Granted, it was still limited (you couldn't run the same apps on phones and desktops), but that was more of a technological problem than anything else (phones were puny compared to desktops, whereas the gap today is much narrower).
It was nearly 20 years ago... Desktop apps in Java barely exist today.
Maybe Webassembly will succeed?
The problem with the question is that there is not just 1 type of platform. There are innumerable platform definitions, whether it be a 2D or 3D gaming platform, a windowing environment, a massively parallel cluster computing platform, etc. At some point, someone decides to extend the platform definition to account for a new capability. Reaching consensus either takes time or results in forks.
"I have been around the world and found that only stupid people are breeding" -- Harvey Danger
All we have to do is get rid of Greed and fix the USPTO system.
Or you could stop trying to go back in time and pretend that virtualization and emulators somehow don't exist anymore, since their existence tends to be the entire point of this question. With the hardware race to keep Moore's law alive as long as possible, we've had "enough" GPU, CPU, and memory in hardware for quite a long time. We've had to artificially sustain hardware sales with premature obsolesce, forced by vendors who "no longer support" a given platform that is often still viable to run the latest software offerings. Again, Greed steps in.
MS would at least loose a large chunk of market share, because many people use their OSes simply because the tools they need for professional work do not work on other systems.
If we had 3D CAD software that ran exactly the same on every device, I'd get a subdermal chip and run everything on that.
Afteral, why would you need a screen, speakers, input or output if it runs exactly the same on computers that do have those?
Software will not run exactly the same on every device, because the capabilities of the devices differ.
If they didn't, we wouldn't have different devices in the first place.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
The W3C and others have done a great job of providing solutions like WebCL, WebAL, WebGL, Canvas, WebAssembly, etc...
We have a platform which is able to be used to make universal applications so long as the browsers support it. Web browsers are pretty close to being universal as well now that most browsers use the same core engines and only Apple seems to be dragging their feet.
Many projects are getting better at offering development tools which suck less for HTML5 applications.
Once we get a tool like Qt for web apps, it will become normal to program for web first.
HTML, CSS and JavaScript are fantastic but they don't lend well to application development. More technology is introduced all the time to move away from coding directly for these systems and instead can compile from more structured systems. A good early attempt for example is PowerBasic which makes writing real applications that run everywhere easy. Sadly, the user experience is quite bad. But it's a great start.
Sorry, it may sound a bit harsh, but this *is* a stupid idea. Different platforms have different abilities and are built and designed for different purposes.
To accomplish a "works everywhere" approach, every platform would have to have all abilities. To use the phone app on your desktop PC, it would need the proper hardware. How much sense would that make? Or a GPS in the same desktop system? Likewise, how do you put a quad-output video card into a mobile phone?
This is a pipe dream of people who only work with software, and totally forget that it needs hardware to run on.
What platform do you use to write the platform that can run all software?
Will it be able to run on itself?
Will it be able to run on the version of itself that checks to see if an arbitrary program will run to completion -- the unsolvable halting problem -- before running it?
Will it be able to run on the version of itself that only runs programs that won't compile?
And so it goes ...
No he asked for a way to do all software executable on all platforms. And that's Java.
And he also asked what happens when all software use it. Well a lot of software do. However a lot of them is then compiled to native code that doesn't follow the "compile once run everywhere" design goal. But looking at Java software that exists and is runnable on any platform that supports Java we do have businesses that run some of their software on a Java only platform.
What we see on Java only platforms is that the operating system becomes a replaceable components. And so does hardware to a greater degree as native applications often has limited hardware support. I can't install FreeBSD on a Raspberry Pi and expect all FreeBSD software to work. But i can install Java and expect Java applications to work. Do if Raspberry Pi has power enough to run my applications i can just use it. And I can test with different operating systems and see what is best for my application.
So what we can already see is that Java applications gravitate away from windows into Unix-likes. People run it on Linux, FreeBSD, Solaris, various IBM mainframe operating systems. And even on Java processors. Then on top of that people use x86, AMD64, Sparc, power, ARM and a number of other otherwise incompatible processor types. What people use depends on what's best for their applications.
So yes if this was extended to other applications such as games and Photoshop we would see a rapid decline in Windows usage and a rise in practically everything else.
But the hardware market would be more profoundly changed. We would see ARM, SPARC and POWER desktop computers and workstations. That would put serious pressure on Intel and AMD especially when it comes to the expensive high end Xeon and Opteron products. We would see more competition and a rapid decline in processor pricing. Just like we have seen on other markets that already lack vendor lock in.
On the enterprise server market we haven't really seen much price decline but that's because the target audience isn't very price sensitive. But we have seen a more rapid growth in performance per processor and as such a decline in the price/performance ratio.
Of course its possible. Several options exist. It involves using a cross platform library that provides the same API on all OSs and hides the OS level variances. To make this really work well of course a complete and powerful API is needed to account for the unpredictable needs of a wide variety of programs. Preferably, APIs for audio, graphics, 3D, video, access to audio and video input output devices, and so on is needed. One such library that has done this is Qt. As far as languages, C/C++ were designed to be cross platform but I do not recommend these in applications due to how difficult it is to write software without security problems with them. I am quite fond of Python and Qt used together.
There is also Java which is another good option.
It would save time in the long run for an application developer, if they found that a cross platform library needs a new feature for their app, to add this to a cross platform library, rather than code OS specific code directly into their application. This avoids having to port applications to a changing list of target platforms, and it tends to easier to add a compatability layer once to a library and then call that hundreds of thousands of times from app code, than it would be to change possibly hundreds or thousands of lines of app code. If you have a function that accesses OS level feature, and is called a thousands of times from applications, and you need to port that app to a new OS, its easier to make a single change by adding a new compatability binding for the function for a new target OS, rather than change the many thousands of invocations of the function.
There's more ways than Java.
No sig today...
I don't hate Microsoft or abhor their products, but they were the ones who made wall gardens the status quo.
I am aware that the Xbox 360 walled garden and the Xbox Creators Club developer program preceded the similar App Store and iOS Developer Program in iOS 2 (then called iPhone OS 2). But games for the click wheel iPod also preceded iOS 2, and the developer program for those was even more closed than the iOS Developer Program. Furthermore, the Checking Integrated Circuit in the Nintendo Entertainment System and code signing in the Atari 7800 preceded even that.
For one thing, the differences among the four major browsers (Chrome, Firefox, Edge, and Safari) are smaller than the differences among the five major desktop and smartphone operating systems (Windows, macOS, X11/Linux, iOS, and Android). For another, web apps have only one "app store": a domain and TLS-capable web hosting. You don't need to pay for a subscription to multiple platforms' developer programs, and you don't need to wait for multiple platforms' censors to release your application.
Diversity decreases the threat profile, you don't want every device having an identical attack surface. Think of humanity; a virus which is potentially lethal to one person may not even give another person a cold, even in the absence of immunity due to previous exposure -- this is thanks to genetic diversity. If every human was genetically identical then we could easily be wiped out by a single well-evolved virus (maybe not too well-evolved if it exterminates the host..).