Carmack On Mobile VR Development
An anonymous reader writes: After surprising everyone by demonstrating Samsung's new VR headset at IFA yesterday, John Carmack spoke with Gamasutra about the difficulties of developing virtual reality in a mobile environment. He also had some interesting comments on developing for Android: 'Okay, there's the normal hell of moving to a new platform — and I gotta say, Android was more hell to move to than most consoles I've adopted. Just because of the way Google has to position things across a diverse hardware spectrum, and because Google still doesn't really endorse native code development — they'd still rather everyone worked in Java. And that's a defensible position, but it's certainly not what you want to be doing on a resource-constrained VR system. So brace yourself: Android setup and development really does suck. It's no fun at all.' He also had insights on building compute-intensive software — if you go to full speed on all CPU and GPU cores, you can expect overheating and thermal throttling in less than a minute.
Mobile development is a joke in general. Unless you're a very established big name, you get lost in a sea of copycat apps. And then you have the piss poor performance, fragmentation and mutant java stack issues with Android. The iOS app store is run by goosestepping nazis who are happy to ruin years of development to reject your app because they might be thinking of doing something similar or because they simply don't like it. Or because it actually does something useful and the UI is "too complex" for teeny-bopper facebook junkies.
I wouldn't waste my time on developing for the current crop of smartphones if somebody put a gun to my head and a $5,000 check in front of me. NewtonOS and Windows CE were actually far more USEFUL platforms than the current game machines with dial pads.
Should have used POSIX instead if Java.
Basically write code that is native, compiles on each system using standardized compilers and with full Unix compliancy. This is what POSIX is. All they would need to do is have a compatible compiler for each CPU architecture which they already have..
Apps would be 10 to 100 times faster, with lower power utilization, more battery life, greater response and performance..
Not surprising that the full power of these devices is also unuseable, laptops and portables are always lacking and reliant on super throttling and power / thermal management ..
Carmack, the creator of Doom, is a console developer? Surely he has developed for consoles, but he is a hardcore developer that has been known to rewrite kernel drivers to push performance.
Google still doesn't really endorse native code development
What the heck is he talking about? Android has the NDK - native development kit - which allows development in c++ using the standard libraries and even The OpenGL ES API, which is exactly right up Carmack's alley. Plus his code will compile straight across under iOS as well. I really don't understand what he feels is preventing him from going that route, unless he wants to do a ton of UI widget stuff that is platform specific.
Better known as 318230.
Wow you sound very knowledgeable, do you have a website or mailing list I could subscribe to?
Mod me down, my New Earth Global Warmingist friends!
Yeh sorry, no. If you work in high performance work like games/VR/graphics rendering in general, no, native code development didn't vanish 2 decades ago. It's still going very strong, because no compiler has yet fulfilled the promise of being as smart as you are when compiling a high level language.
No need for the phone to do anything except receive data and display it; couldn't you just stream visuals set up for use with a VR solution like Cardboard or Samsung's thing to the phone from a computer?
You're an idiot.
Nobody except the most assbackwards stick-in-the-mud developer would ever develop in Java. I can name exactly one game written in Java (Minecraft) and it has horrible performance on everything except iOS and Xbox360, because there it doesn't use Java.
My next tablet will be MS Windows 9, since I bought a used Android tablet and it was bricked because he was probably updating his operating system tablet that I got for very cheap.
I have been an Android developer for two years and a Java developer for almost 15, and even a former Google employee, and...in my estimation, Carmack is 100% right.
Despite how much more I like Java than lower-level languages, Google's software stack is a complete disaster. It's poorly designed, bug-riddled garbage that I have actually considered re-writing parts of, even in the middle of a high-pressure project. What makes matters so much worse is Android's distribution model: rather than the direct-to-consumer approach that Apple takes, Google distributes Android indirectly via its device vendors, who can provide arbitrarily modified or out-of-date versions of the infrastructure that you're expected to support when dealing with angry customers who don't understand why their network stack mysteriously doesn't work.
The NDK is not an answer. It's a wreck because JNI is a wreck. I've been using JNI since 2002, and almost nothing has evolved since then - it was never anything more than a token olive branch to luddite C++ developers in 1995, and probably never will be. Ultimately, Java is excellent for mature devices (like servers), but is not suitable for emerging devices (like all the mobile devices we're seeing now) because of its runtime overhead.
Despite Apple's many shortcomings, one of the key points they get right is that mobile development needs natively compiled, non-runtime (or thin-runtime) languages. And, of course, libraries that work. Apple isn't exactly the gold standard on that either, but at least they're miles ahead of "beta early, beta often" Google.
It's back to the age-old arguments.
You can have the speed of native code, if you deal with the problems of native code (device compatibility, non-portability, security, etc.)
Or you can have the security and cross-platformness of some standardised intermediary language that basically runs as a VM at a slightly slower pace.
To be honest, I think Carmack's best work is long behind him, but there's also a need to develop on appropriate devices. If you need a device to be that fast and powerful, then aiming at smartphones and tablets probably isn't the best idea at the moment - they aren't the cutting edge of the market and won't be for a long time. In the same way that aiming at the 286 probably wouldn't have been the best idea for Doom, or that aiming only for software rendering probably wasn't the best idea for Quake.
Get the code going and providing something people want, and they will either buy devices that can run it, or ask you what you need for a port to work. By the time you're finished, the speed you're after will be available in the next device to launch.
Isn't this how cutting-edge development has always worked? Had to have huge resources and powerful machines totally unlike those seen before to make the software run at the speeds you need while you're developing it. Then a year after release, everyone has those devices and soon people are calling your code "old"?
native code development vanished with windows 95 there buddy
So all the cool kids are rewriting their DB servers and OS kernels in Python? How did I miss that?
Il n'y a pas de Planet B.
> native code development vanished with windows 95 there buddy
rofl dude.
oh you can pretend all you want its still obscured by endless layers of os management sandboxing and api's
so just what ASM language do you program your windows 7 app in?
so what assembler do you use for windows server? compiled code != native code
course I dont expect a comp sci moron to understand that
Like I said, very cool portable game system
How so? Some game genres fit a touch screen, such as point-and-click games, endless runners and other steering games (such as Flappy Bird, Canabalt, Temple Run, Jetpack Joyride, and car racing), and shmups. But beyond those genres, I'm told most people don't buy a MOGA or other Bluetooth gamepad. Without directional input or discrete buttons, good luck getting an exploration-oriented platformer or a fighting game to work well on a flat sheet of glass. I tried the free version of Pixeline and the Jungle Treasure on my Nexus 7 tablet, and making even basic jumps with the virtual gamepad was an exercise in frustration. But if you can think of an enjoyable platformer made for Android, let me know. I'm itching to try its free first level.
Hasn't coding in Java been proven to cause brain damage? Like worse than TCL or BASIC?
Visual Basic is C# with a different syntax, and C# uses the same overall concepts and almost the same syntax as Java. So if Visual Basic causes brain damage, so does Java.
POSIX doesn't have an API for high-speed graphics
De facto it does. Every system I'm aware of that supports both POSIX and high-speed graphics supports OpenGL (or OpenGL ES).
The human brain has an analogous limit. A healthy human being uses 100 percent of his or her brain, just not all at the same time.
Actually, Apple's App Store is a perfect model for console development, because Microsoft, Sony and Nintendo have far more stringent requirements.
But is there a good reason why these stringent requirements don't benefit the end user?
You can have the speed of native code, if you deal with the problems of native code (device compatibility, non-portability, security, etc.)
Theoretically this has a solution: separate the model and view. Make your model in the portable language and a view for each platform in the platform's preferred language. Then it's just a recompile to hit each instruction set. But the problem comes when a platform requires a language not shared with other platforms, such as J2ME phones requiring 100% Pure Java, or Windows Phone 7 and Xbox Live Indie Games requiring C#. (In theory it's verifiably type-safe CIL for the .NET CF, but in practice that means C#.) Second- through fourth-generation game consoles had it worse: one used a 6502 family CPU while the other used Z80 or 68000 or both, and C compilers for those architectures weren't quite up to speed yet.
Using APIs and libraries is not the same as running interpreted code. You don't have a fucking clue what you are talking about and you have probably never written a single line of code in your entire, however brief, life.
compiled code != native code
Compiled code is exactly that. What do you think a compiler does?
You sound like some little kid who has never touched a programming language or compiler.
Get the code going and providing something people want, and they will either buy devices that can run it, or ask you what you need for a port to work.
Some persistent Slashdot users claim that if "devices that can run it" aren't already widely deployed, then the product inherently isn't "something people want". They use the example of a PC in the living room, which is currently an unprofitable niche because most people who want to play video games on a TV are allegedly better served by a PlayStation $digit, despite its lack of selection and lack of user-made game mods, as opposed to a full-size PC. If you disagree with this, I'd be interested in what you have to say.
PLEASE John Carmack, build us a better mobile os?
Sounds like phones need some sort of thermal interface to their dock, which can then have large heatsinks to suck the heat out.