I've been monitoring this thread. edit: all that I said bellow are just random considerations, not a "in favor"/"against" statement. And there are probably 100 typos
In my experience, Apple is hostile towards developers. I'm glad I no longer have to support that platform.
Two days before the announcement, I was working on the Cocoa/GL backend for my window creation library (sort of like glfw). When I saw the news, I immediatly removed all the code that I had for Cocoa. Felt really good.
But, even with situations like that, I think it doesn't mean OSes are less reliable/stable for the future of games than fantasy consoles. As long as the games are coded with a layer that groups what is platform specific, then it's good. GLFW and SDL, for example, are these kinds of layer. If OSes change in the future, it's a matter of updating these layers only. This is not less work than it would be with a fantasy console. If in the future the OSes change, the fantasy console itself will need to be updated.
So, fantasy consoles have the good aspect that there's no way that the developer will accidentally use any platform-specific feature, because the fantasy console's features is the only thing the developer will have access to. On the other hand, fantasy consoles add the need of an interpreter, which consumes processing power.
Native games: OS --interpret--> application
Fantasy console games: OS --interpret--> fantasy console application --interpret--> game in the console's language
Despite the second layer of interpretation, I believe even some processing consuming games could be done.
-------------------------------
Other thoughts.
Considering the subject surrounding the original post is the future of games. I assume as in preservation. A fantasy console has some advantages that using an abstraction library doesn't:
- The fantasy console works on an specific language, only. Native applications, even if they use abstraction libraries, are dependent on their compilers/interpreters, which are also subject of becoming unmaintained in the future.
- Fantasy console doesn't need to be necessarily an application, but can be a protocol. This means that someone can make an implementation of the
Fantasy Console Protocol Deluxe in C, in Javascript, in Lua, in Assembly. This is what is happening now on Linux/FreeBSD: the Wayland protocol is being made to replace X11 in the future. Years ago, who would've thought that X11, an ancient established library, would have its days numbered? This is also an example of why we shouldn't believe that even well established tools, like GCC, will last forever.
Language of choice is important, but, ultimatelly, what will determine the binary compatibility (backwards-compatibility) is the convertions from (script) language to binary that the fantasy console will interpret. This is a difficult task that even Lua has problems with. I'm using Lua here as example, because honestly, it's the best candidate (although I have some critiques against Lua). Speaking as someone that has embed Lua with C.
Graphics can be easier than it seems. Expose an OpenGL-like API to the developer: the developer has to pass buffers, enable/disable some states, make a shader. Under the hood, the fantasy console could literally use OpenGL (or even DirectX, or Vulkan), just translating what the fantasy console language is passing to the lower level API.
Maybe we could leverage an existing VM in order to alleviate the load of developing this theoretical fantasy console. If our thing targeted the JVM for example, we wouldn't really have to worry that much about platform specific code, other than maybe graphics programming stuff.
NES emulators (
https://github.com/search?l=C&o=desc&q=nes+emulator&s=stars&type=Repositories) are probably the best, simple, start.