Nvidia Lauds Windows CE Over Android For Smartbooks
ericatcw writes "Google's Android may enjoy the hype, but an increasing number of key industry players say the mobile OS isn't ready for ARM netbooks, aka smartbooks. Nvidia is the most recent to declare Android unfit for duty, stating its preference for Microsoft's Windows CE, which an Nvidia exec praised for having a "low footprint" and being "rock solid." Nvidia is busy optimizing its multimedia-savvy Tegra system-on-chip for Windows CE. Such improvements won't arrive for at least a year to Android, which has an inflexible UI and poor graphics support for devices larger than a smartphone, says Nvidia. Other firms echoing similar criticism include ARM and Asustek."
So you're saying software designed for mobile phones doesn't work as well on a little computer like device as software which was designed for little computer like devices?
Wow. Amazing. Incredible.
And they're the same age too!
No, wait, Windows CE is 13 years old. It's had a little more time to design the window manager for different screen sizes.
Comment forecast: Bits of genius surrounded by a sea of mediocrity.
Isn't this NVIDIA opinion somehow influenced by having Microsoft as customer for their Tegra chips going to upcoming Zune HD?
If NVidia does not want a piece of Android business, it is NVidia's loss.
And AMD/ATI gain.
My money is on the Linux community figuring out how to incorporate NVidia support into Android with or without NVidia's corporate blessing. Heck, a few of NVidia engineers belong to Linux community too.
I've heard that the new Zune HD will utilize Nvidia's Tegra platform, so maybe this is their way of paying back the favor.
i'm sure several users have had similar problems... they should google it.
From TFA:
"The world soundly rejected the first netbooks that came out with Linux," he said. "Printers didn't work, and devices didn't get recognized. The whole thing was a mess."
I'm sure all printers come with WinCE drivers these days. Or maybe Nvidia knows how to install Vista drivers on CE?
I mean 20+ years of experience and all perfectly working C/C++ code and libraries have to be thrown out of window ? Cmon Google. Java is a nice toy, but unfit for production, get real.
Someone has never heard of JNI.
I've never found any Google products I have used to be inferior to their Microsoft counterparts.
I trust Nvidia to a point, but suspect they're just protecting their own interests, since their job would be a lot easier if they didn't have to worry about writing drivers for non-x86 architectures.
Nvidia is also trying to get someone in their corner for the upcoming fight against Intel during their licensing and patent wars. Good news for VIA and anyone else not stuck in the battle of monopolies.
This is standard operating procedure for Microsoft contractees. Happened just this last month with Asus where as soon as Microsoft negotiated a new deal with Asus, Asus out of the blue started spouting anti-Linux FUD.
The Zune HD contract with NVidia obviously has the same type of garbage built in.
You do know that you can use C/C++ code right? JNI is fully supported you know. At most you'd have to rewrite the GUI code in Java and you need to do that with most mobile devices anyway (and here's a hint, Windows CE is different enough from mainstream Windows that it usually requires significant reworking unless your app uses a subset of the MFC libraries or a subset of .NET).
This signature was left intentionally blank.
I was at a conference in 2002 where the chairman of ARM, Sir Robin Saxby, gave a keynote talk on ARM. In the Q&A session afterwards one of the attendees asked what Mr. Saxby thought of Linux - he replied that it was a toy operating system that would never amount to anything, and that open source was a useless strategy for developing software and he didn't see any place for it in the business world. The hall erupted with various PhD students and postgrads raising their hands, and after three people all said basically the same thing - that they use Linux and think open source is great - the chair had to say no more Linux questions. But after hearing what the guy at the top had to say, it would never surprise me to hear that ARM might be hostile to Linux and open source, even when it's running on their own chipsets.
Two ends of spectrum: maximum performance vs hardware independence.
Android targets developers that choose to write their code once and expect it to run on each new device without more work on their part.
Windows CE will target those that need to squeeze everything they can from the hardware.
It would be either that or not having Nvidia support on Windows 7 SP 1...
http://www.dieblinkenlights.com
You are talking pure nonsense.
First, for many devices it is not about speed, it is about security. Java provides a very robust security framework to run untrusted code. If you were to make a similar security framework for C/C++, you would end up with Java.
Second, if Java runs too slow for you - buy a better CPU.
Third, I doubt you realize how many productions systems are running Java. My department alone is running a multi-million dollar platform all on Java.
Last, you actually can run C/C++ code on Android. You can run ARM assembly, C-Sharp, and Python too. But don't tell anyone.
I would go even further in that there are many useful programs written in a variety of languages like C, python, perl, lua, etc. Years ago there was a lot of hype about a Pascal computer that even had hardware support for the language. It wound up in the the dustbin of history and I predict that a Java based single language computer will fare no better. Those who cannot remember the past are condemned to repeat it.
Really, the early success of netbooks loaded with Ubuntu showed clearly that there is no real need for Android. Now, there's going to be netbooks with ARM. GREAT, this is the time to demonstrate (if only it was needed) that Linux is portable, and that distributions like Debian can run perfectly on ARM chips. There WILL be some players in the industry that will understand it, sooner or later. I knew there will be a time where DFSG free OS would start becoming popular just because of the fact it can fit any hardware. It's great if it's demonstrated by using them on cheaper netbooks.
As Wikipedia says, native code runs under Android fine. The Chrome web browser runs on Android. Chrome is not written in Java.
What you might mean is that you can't run native code on some specific mobile phone type device without hacks, and that you can't upload native code to the App Store. That much is true. In the first case, some manufacturers like to lock down their devices - the iphone is also pretty much locked down. In the second, Google want platform independence. But Android itself can clearly run native code - most of the software that it ships with is written in C. And you can distribute and install whatever Java code you want on any Android device, which is better than Apple's "you only load what we want you to load on a phone" rules.
A company that only begrudgingly supports linux with a massive binary blob and no real support thinks that it may be easier to support a platform where that kind of treatment is considered the norm. This does not surprise me. I have a lot of respect for the nvidia linux engineers and they seem like knowledgeable and good guys but, I would imagine that management has tied their hands and this is a political rather than an engineering decision.
Mike Rayfield:
"The world soundly rejected the first netbooks that came out with Linux," he said. "Printers didn't work, and devices didn't get recognized. The whole thing was a mess."
And how is Windows CE/Mobile any better in that regard? I would think it's even worse.
The Zune HD that has been said to have a version of Win CE as the OS.
Anything can be found funny, from a certain point of view.
I have to reiterate this again and again.
Hmm... redundant loops. Perhaps the problem isn't the language, but your code?
"You do know that you can use C/C++ code right? JNI is fully supported you know."
You do know Google doesn't really officially support native code apps and there are no defined native mode API's to access the things you might want to access in native mode like graphics and audio. There are interfaces there but they are internal, not published and are "use at your own risk". If you use them chances are relatively high your native code will break the first time Google puts out a new version of Android.
I think the grandparent meant to say iPhone supports native code as a first class citizen while Google doesn't. You certainly can do some kinds of native mode apps that don't interact much with the hardware and OS, or do so only through clunky JNI.
Java is great for a lot of things, for ease of development, portability and improved security, but it is something of a limiting factor for applications that need maximum performance or to get closer to the metal.
Not sure if its intentional or not but in areas like media players it gives Google a degree of exclusivity in app development since they can use native code and their internal API's whenever they want, while that is a relatively dangerous thing to do for third party app developers.
@de_machina
My department alone is running a multi-million dollar platform all on Java.
And it would just be a million dollar platform using C/C++ instead. Face it, Java will forever be bloated and slow.
Maybe I don't get it, but this looks like a concerted FUD campaign against Android. I don't know much about the Android internals, but isn't graphics hardware acceleration handled in the DRM part of the Linux kernel? What does this have to do with Android?
Presumably Android would have to implement the rest of DRI (if they don't use the existing Linux infrastructure / didn't do so already), and next their equivalent of a X.org video driver. But what's the big deal?
Also, all video and graphics rendering in Android is done today by the operating system's Java code, a technique he says is too slow for HD video.
"There's no hardware acceleration. It's all software," Rayfield said.
So, huh? Because it's Java it can't use hardware acceleration?
Other major problems include the fact that the Android icons are too large, and apparently it's gonna take one year to make them small... Well, that makes a lotta sense.
It would make more sense if nVidia said "We're already having a hard time with binary blobs for those lousy x86 linux geeks. Now they want to do that for ARM too, and even worse, for something that doesn't use the X.org architecture. I say we better get together again next year."
After twenty years of Microsoft corrupting the industry and colluding with other companies to place their products, how can anybody take such statements seriously? Nvidia has strong ties to Microsoft, and when Microsoft tells them to jump, they simply ask "how high".
Personally, I think Android is not a very good choice for netbooks; Ubuntu Netbook edition is a much better choice. But Windows CE wouldn't even make my list of a usable netbook operating system.
Apparently someone doesn't appreciate the difference between hardware and software.
Anybody want a peanut?
"Windows CE also has a "low memory footprint and a good collection of apps,"
Native Linux can be stripped down to be really low on resources, and has multiple times the apps WinCE can count on. Problem solved.
"For instance, Android screen icons that fit on smartphone screens (usually 4-inches and under) are oversized on a smartbook's 8- or 9-inch screen, he said."
This is of course bullshit told to hide something else, or do we really believe multigazillion dollar companies choose their platform according to icons sizes?
Anyway, native Linux already counts on lots of small footprint and themable (ie customizable sizes) interfaces. See some projects at maemo.org for an example of native Linux apps running on ARM hardware. Problem solved.
"Also, all video and graphics rendering in Android is done today by the operating system's Java code, a technique he says is too slow for HD video." "There's no hardware acceleration. It's all software," Rayfield said.
Native linux offers video acceleration. Problem solved.
"The world soundly rejected the first netbooks that came out with Linux," he said. "Printers didn't work, and devices didn't get recognized. The whole thing was a mess."
Well, I have sold a good number of Linux netbooks to a number of non technical people, and all of them asked to install XP after some months citing various difficulties, therefore I can confirm this to be at least in part true. Eventually it turned out all those Linux netbooks recognized their devices, printers, USB stuff and whatnot, but the amount of work required for whatever task the user was doing was "bigger" than on XP, where bigger meant push 4 buttons instead of 3 or open a shell and fire a couple commands instead of pushing a button.
It's not about being stabler or whatnot: Linux is good for technical people who enjoy chatting with the shell, while Windows users are lazy people who want to minimize the work on the computer to spend their time on other stuff. From this POV Linux wasn't, isn't and will never become a good operating system for the masses without losing its identity by becoming too Windows like.
For the rest of us, and back to the topic, Native Linux *can* be set up in order to recognize a plethora of peripherals.
The conclusion? All but one, not even a whole one, of these problems would simply not exist if Java wasn't used. Many of us raised some warnings about that, but Java dev^H^H^Hfanboys who love their language because it's the only one they know dismissed the argument. Thankyou very much.
For those who still didn't wet their toes with Java, stay well away of that crap.
Java is a nice toy, but unfit for production, get real.
Troll. Troll!
Java is used in production in many places. There is no functional thing that c++ can do that java cant. Any many would say that java has better libraries and lower costs.
Only Microsoft would think of releasing a product whose more-or-less-official abbreviation means to grimace in pain.
More seriously, if WinCE genuinely has a smaller footprint + is more stable than Android, that says something really bad about Android.
-Z
1) Poor UI - what he is talking about? Windows CE is a mess. Yes, Windows Mobile 5 was kinda Teletubies land as Windows XP, but still, it's a huge mess stiched together
2) Doesn't support devices larger than smartphones? Ohh boy, yes, it doesn't, because it doesn't aim for it!
Sounds like Microsoft partner trashing competitor. Propably there are technical reasons why Nvidia have chosen Windows CE, but these doesn't sound like valid one.
user@ubuntubox:~$ stfu This server is going down for shutdown NOW!
Java is a nice toy, but unfit for production, get real.
Might help to do a bit of research before making posts like this one. You realize that Blackberry has been an all-java platform for years now, and nobody is complaining about performance? Even on their new systems, which directly compete with the iPhone.
The problem here isn't with the Java platform, it's in the fact that Android is a custom implementation that is not standards compliant. This, in turn, means that the tens of thousands (or more?) of J2ME applications that have been developed over the years are useless on this platform. By choosing not to support it, Google has greater control over the platform - but they also compete with the "real" JME platform for mindshare, while providing no measurable advantage other than marketing.
Native code is not officially supported. The Android-SDK gave me Java last time I tried.
The trick of native code is that you do not need to buy expensive hardware to run you application at decent speed. You can run your server even on ARM Cortex while Java needs some expensive hardware to be even considered. Cost saving, green technology, etc. that is what native code enables. While Java is designed to sell pricey hardware from day one.
Does any one find this sentence scary: "Nvidia is busy optimizing its multimedia-savvy Tegra system-on-chip for Windows CE."?
Why are we now optimizing hardware for software? Hardware should be designed to be as accurate and effective as possible. Let the OS optimize itself for the hardware. It is much more difficult to redesign hardware than software (hence the hard- and soft- prefixes). Hopefully, this is just a poorly worded sentence and we are not headed towards Winvidia.
If you were to make a similar security framework for C/C++, you would end up with Java.
No you wouldn't; if you were to start with C, you would design something very simple that sat in kernel space and validated system calls according to a policy before allowing them to proceed. Fortunately, it turns out all modern UNIX-like systems come with something that can do exactly this (Windows NT does too, but it has such a horrible UI no one uses it properly).
The only way any program, irrespective of language, is able to influence any part of the system outside its own memory space is via system calls. You don't need to run your software in a VM to restrict the system calls it can access.
I am TheRaven on Soylent News
I mean 20+ years of experience and all perfectly working C/C++ code and libraries have to be thrown out of window ? Cmon Google. Java is a nice toy, but unfit for production, get real.
Canonical got Android apps running on Ubuntu on x86, without recompiling or emulation, can you do that with C/C++? JVMs are now very fast, JIT compilation and run-time optimization lets them match or beat native code for long running processes. Since the JVM is always running in Android, you don't keep feeling the startup cost, but you do keep benefiting from the optimizations. Java has been a standard for mobile application development long before Google got into the game.
http://www.mhall119.com
Let's just say that I'm currently working on an application for my employer that targets mobile devices (Win CE/Mobile) and tablet pcs (XP/Vista) at the same time. Even using .NET and the Compact .NET framework we have to do a TON of refactoring for GUIs. Heck, there's even basic classes/methods that you would expect to be available on the mobile version but aren't there. It ends up being a lot of code being ifdef'd (#if...) for each version.
Find Nearby Indie Events
Dipshit, you're juvenile little tirade isn't impressing anyone.
JNI is kind of a pain, but it's interesting that they allow it anyway. It seems like it bypasses their whole security platform idea with having programs run in a VM. Are there C headers/libraries for all the hardware you would want to access like graphics chip, accelerometers, cameras, etc? And I think it's a good thing that at the least you have to redo the GUI for a mobile app, because the desktop application paradigms don't transfer well to a small screen.
All your base are belong to Wii.
Native code is not officially supported. The Android-SDK gave me Java last time I tried.
Crosscompile your application for ARM and push it on your Android phone with adb.
The trick of native code is that you do not need to buy expensive hardware to run you application at decent speed. You can run your server even on ARM Cortex while Java needs some expensive hardware to be even considered. Cost saving, green technology, etc. that is what native code enables. While Java is designed to sell pricey hardware from day one.
The trick with mobile devices is that users want to run hundreds of thousands of untrusted programs from application markets. Native code leads to viruses, trojan horses, keyloggers and all kinds of nasty things. Users have to have a protection mechanism. Java with its multilayer security is perfect for mobile applications.
If you are talking about servers, I have a newsflash for you. The majority of servers hardly use even 50% of their processing capacity on average. Java overhead at this stage of CPU development is negligible. Green movement will benefit more from saving the resources spent on development and maintenance of native code.
Chrome is not written in Java
Thank you for this sir.
Google gives you Java (for App Store), but their own applications run native code? Google enjoys the power of native code and you are left with Java, so you are a second rate Java developer from day 1 on Android ? Google is more insulting to developers that Microsoft or Apple ever were.
Windows CE runs native, the portability point is pretty invalid. Also on iPhone I have proper GCC/G++ compilers, I do not have to rewrite everything to some other language. Google should do the same as Apple and give us GCC, Java should be optional not mandatory.
And you can distribute and install whatever Java code you want
OK, some people do not have a time to rewrite their applications to some interpreted language.. Windows CE and iPhone are perfectly fine platforms regarding this, they run native code no problem and you can deploy that code in the App Store.
There is nothing simple about solving the system call validation problem. You actually end up writing a VM.
You are also forgetting about the problem of arbitrary memory pointers. You don't have to break into the privileged kernel mode in order to break security. All you have to do is to read or write what you are not allowed to access.
I find JNI a pain, but generally have had good experiences with p/invoke. Thus, I was fascinated when I came across J/Invoke which seems to work almost as well.
I ask, NVIDIA who?
...or that of anybody else who goes with Windows CE.
I work for a very large computer manufacture who is coming out with an ARM based PC. We looked at Marvell, Freescale, and NVIDIA. NVIDIA was the only one who has no support for Linux and because of this was marked off right away. Besides there lack of support for Linux there ARM CPU is pretty weak compared to Marvell and Freescale, there only advantage is the GPU. But because of the lack of Linux support we crossed them off right away. There really only hurting themselves.
Android doesn't use X - nVidia have drivers for X and for Windows - but not for Android - so no one's choosing nVidia hardware for Android - so nVidia's discouraging people from using Android ....
Just wait, if they're smart a year from now they'll have Android drivers and wont have a problem with it
This is about software and the user interface being useful on a device of the target size and purpose. Android's target is smartphones not things that resemble the offspring of a PDA and ultra-portable laptop and the UI simple doesn't scale to anything bigger than a phone. WinCE's target has always been embedded systems, which do actually resemble these little PC-like devices, especially in the core hardware.
And just for the record, Windows CE and Windows Mobile are not the same. WM is based on the CE core, but they are no more the same than WinXP and the first gen x86 based XBox are.
- Disclaimer: Information in this post deemed reliable but not guaranteed.
I was going to moderate your post, but I couldn't decide which way to mod it. I should have modded it up because you were right in complaining that android doesn't make use of existing libraries,c using a lot of code to be rewritten. But, I also wanted to mod it down for bashing Java unnecessarily. So I just commented instead. Its really just an innocent bystander, that really is fit for production and used heavily by a number of developers on platforms big and small. The walled garden of andriod is the really problem the fact that the grass is made out of Java doesn't change that fact.
Well.. maybe. Or Maybe not. But Definitely not sort of.
Most of these discussions/arguments about Java are strictly concerning performance, like whether or not Java is bloated and slow. Your post there is one of the first I've seen that neatly answers the question of "why Java?" If it is as you say, then that's a highly desirable feature. That's especially when you consider the volume of personal information that's usually contained on a mobile phone, which I'd imagine would make it an attractive target for malware.
My understanding is that in most cases, a server is going to max out its disk I/O or its bandwidth before its CPU(s). That seems especially true to me for a Web server, since Javascript and other techniques delegate much of the processing to the clients.
I did have one question for you. In this post below, TheRaven64 stated:
I don't know much about Java but this got me curious. What does Java offer here that would be difficult (or impractical/impossible) to achieve with using syscall restrictions and other devices to sandbox the apps? With virtual memory and appropriate syscall restrictions that sounds like it should work too, and would make it easier to run native code, yet I don't hear of devices that use such an approach. Is it that both methods are equally viable, only with Java someone has already created an implementation that is useful for mobile phones so why reinvent the wheel? Or is Java's approach inherently superior in some way?
It is a miracle that curiosity survives formal education. - Einstein
NVIDIA are trying to promote CUDA for scientific computing. They should be more careful about antagonizing academics and PhD's.
They have this nifty little SoC called Tegra, announced about 1 year and a half ago, which still has to prove it's not vapourware.
A "here and now" business sense makes a pretty bleak future. Eventually software built on a "here and now" business sense will be a big patch-ball of tape and you'll be looking at OSS again. Why avoid it? Don't use proprietary solutions, whether they be WinCE or Android or whatever. Invest your efforts into protecting yourself with compatibility and refinement of the software you use by building on OSS. It reduces the initial investment and provides a good base to build on, and whatever you build will be well defined, adaptable, and compatible in future scenarios.
This post show preferences for both windows over linux and microsoft over google ... Hell of a starving Troll !
Google gives you Java (for App Store), but their own applications run native code?
Yes, because they want everything in the app store to be forward compatible: in future Android might run on chips that are not ARM, so native code would break, and though it would be the developers' fault it would still make their app store look bad.
Windows CE runs native, the portability point is pretty invalid.
Most of the native apps run on ARM chips only, and won't work e.g. on MIPS based devices (also supported by Windows CE). The portable apps use .NET Compact Framework, so the situation is more or less equivalent to Java.
on iPhone I have proper GCC/G++ compilers
Which you can't use without jailbreaking, so your argument is instantly moot.
Those who would give up liberty to obtain working drivers, deserve neither liberty nor working drivers.
but it is something of a limiting factor for applications that need maximum performance or to get closer to the metal.
FUD. Java ME runs on processors embeded in credit cards for at least a decade. And no, that's not the execution time of the program. It (ME) gets compiled just as C/C++ would, in that case. Android is a different thing of course...
Google gives you Java (for App Store), but their own applications run native code?
Yes, because they want everything in the app store to be forward compatible: in future Android might run on chips that are not ARM, so native code would break, and though it would be the developers' fault it would still make their app store look bad.
That's great for Google and all - but it doesn't do much for me, you know?
As a user I want people to be able to port existing code pretty easily, and to be able to write new code that fully utilizes the power of the machine. From my perspective as a user, there's no advantage to the phone running a VM. From my perspective as a developer, the fact that the phone runs a VM for all third-party software is actually pretty distasteful. This is an embedded platform we're talking about... It hasn't got a ton of on-board storage, and wasted processor cycles mean wasted battery, too.
Bow-ties are cool.
"no real support" ? whatever do you mean, there is infinitely better support and drivers from nvidia than from intel or ati.
ATI's driver doesn't compile on latest kernels without voodoo
Aw, hell... Why do I need an old 3dFX card installed just to get my ATI card working??
Bow-ties are cool.
not to use Linux or Mac.
If they do they'll get their "Air Supply cut off"... their per/unit price will jump significantly, making them uncompetitive with their competitors ...
I could go on but space is limited. Microsoft is full of dirty tricks. Just ask James Plamondon and his "Technical Evangelists (TE):
http://platformevangelism.spaces.live.com/default.aspx
http://platformevangelism.spaces.live.com/blog/cns!37F174267DC274C!155.entry
http://www.groklaw.net/pdf/Comes-3096.pdf
Or the training materials he used, which taught the "Slog" and the "Stuffed Panel":
http://www.groklaw.net/articlebasic.php?story=20071023002351958
And financial dirty tricks:
http://www.billparish.com/msftfraudfacts.html
Here is a summary of a LOT of Microsoft's dirty tricks, and the reasons why so many "independent" corporations behave as wholly owned subsidiaries of Microsoft:
http://www.grokdoc.net/index.php/Dirty_Tricks_history
So, ya, it is no surprise when NVIDIA knucles under to Microsoft, otherwise their video chips would suddenly fail to work as well as those from other video chip vendors, just the way DRDOS "failed" to work as well as MSDOS when users tried to install Win3, which was one of the first of an unending examples of how a copy without ethics operates. An people were surprised that Capitalism exhibited a "flaw" in the current economic crisis?
Running with Linux for over 20 years!
I never saw the point of using Android or WinCE for netbooks...
Android because it's new and designed for phones, and would be rather crippled for a laptop.
CE seems to sell to people who think it's the same as desktop windows, only it's not and those users who bought it thinking that will end up seriously disappointed... You end up with a very limited set of often crippled apps. The only sensible choice for ARM based netbooks, is a decent linux distribution (not the crippled versions that shipped on x86 netbooks), so you have a full selection of software available in an easy to use repository (if you do the repository well people will lap it up, see the iphone app store)... Getting extra apps onto the eee version of xandros was painful, make it easy like apple has and people will love it.
http://spamdecoy.net - free throwaway anonymous email - avoid spam!
That looks pretty cool. I guess part of the problem for me before was that I didn't really have any C experience the last time I tried JNI. I was just trying to compile a small DLL to read an analog sensor from Java where someone else had written the code, and it was just a huge mess. At least now I have more experience with C so I could have figured it out more easily, but the fact remains that it's still a kludgy situation.
All your base are belong to Wii.
Most of these discussions/arguments about Java are strictly concerning performance, like whether or not Java is bloated and slow. Your post there is one of the first I've seen that neatly answers the question of "why Java?" If it is as you say, then that's a highly desirable feature. That's especially when you consider the volume of personal information that's usually contained on a mobile phone, which I'd imagine would make it an attractive target for malware.
For better or worth, software development is nothing like video games. Performance, the topic of obsession for video gamers, is oftentimes an afterthought in industrial software development. Security, reliability, maintainability, computability, clarity receive higher priority almost each and every time. In order to understand this, of course, you have to spend a few too many years in software development. The truth about performance is rarely taught in CS university course, and almost never understood by CS students. I too was a fresh CS grad over a decade ago (I actually remember the time when Slashdot was popular) and despised, if not hated, Java. I adored C, optimized parts of the code in assembly, and though I knew everything there is to know. Boy was I silly. I was forced by my employer to deal with Java parts in a huge mixed codebase in 2000. I accepted Java in 2003 when it finally started producing decent benchmarks on the brand new Linux test equipment. Since then, I worked on many diverse problems, broadened my software architecture experience, and came to appreciate Java's design. I don't think I can design a better platform myself. I know that James Gosling is a freaking generous because I remember when I though he was a fool. Software design should never focus on fixed performance cost factors. Moore's law will marginalize fixed performance factors in a matter of years no matter how high in absolute value these fixed factors are.
But don't take my word for it. Listen to my elder colleague Charles E. Leiserson from MIT - Why study algorithms and performance?
I don't know much about Java but this got me curious. What does Java offer here that would be difficult (or impractical/impossible) to achieve with using syscall restrictions and other devices to sandbox the apps? With virtual memory and appropriate syscall restrictions that sounds like it should work too, and would make it easier to run native code, yet I don't hear of devices that use such an approach. Is it that both methods are equally viable, only with Java someone has already created an implementation that is useful for mobile phones so why reinvent the wheel? Or is Java's approach inherently superior in some way?
Unfortunately, writing a program that would validate system calls is much much easier said than done. It takes no time what so ever to say it. If you actually start writing a program like that, you will quickly realized that this will be The most complicated problem of your life. Take a look at the NSA SELinux codebase. SELinux actually implements an extremely limited functionality to validate system calls. SELinux configuration cannot be controlled from the user space, so it is useless in any environment where you actually want to leave some security decisions to users. Also remember, if you create a workaround to give users some control over SELinux configuration, nothing will stop a malicious program run by a user from using the workaround you created without the user's knowledge. You need at least 3-tier architecture to implement a usable security. Moreover, you will have to analyze sequences of system calls in bundles and not just do an analysis call by call. Solving problem after problem, you will end up writing a virtual machine in pretty much the same way it is written for Java. It took more than 10 years for Java developers to implement their virtual machine solution - they started around 1992 and the most functio
Actually arbitrary pointers are not a problem, if in fact you can reliably prevent any system calls that the program should not do.
I agree with you that detecting whether the system calls are allowed is a problem. Describing it as a "VM" is probably wrong (I suspect you are confusing it with the rather delicate way you have to do this on Windows as opposed to the LD_PRELOAD on Linux). However once the calls are trapped there would have to be an extrodinarily complex AI system to actually figure out if they are really what that program should do.
For instance some program that can update your web bookmarks could probably also insert or modify them all to spam addresses, I think it will be hard for the call detector to prevent that!
In other news Nvidia executives praised windows vista as "the bestest OS ever!" and inconspicuously stuffed away protruding wads of cash in their pockets while a winking Steve Ballmer gave them a thumbs-up from the corner of the room.
The reason I hate JNI is all the boilerplate code you seem to have to write. Its almost like you are marshalling types in the C JNI layer again after the JVM already marshalled the types into the C code. I like P/Invoke since it seems to sidestep that for the most part. My JNI pain came from trying to get strings in and out of the JVM, whereas p/invoke makes it a breeze and my tinkering with J/Invoke has been similar.
Oh, no, if the apps weren't in Java they wouldn't be portable. Unlike say Debian's 25113 packages -- the vast majority of which are not Java or .NET-based -- which run just fine on ARM and MIPS and, well, pretty much anything else you can think of. If Google wants to make sure apps are portable, they should tell the devs to not be stupid, not force them to use Java or .NET. (Personally I think using managed languages like Java or .NET (or Python or pretty much anything except C/C++) is in general a great idea because it helps avoid certain classes of bugs, but really, the devs should be allowed to use whatever language they want.)
But that would be a standard business practice; you watch your competitors, old or new.
For some it is a laugh; for others it is frustrating because they are doing the same as you only cheaper.
Semi-automatic amateur armchair Australian philosopher; conjecture ready at any moment...
Does anybody know an actual person that has a) used windows CE and b) did not hate it with all her heart?
Copyright infringement is "piracy" in the same way DRM is "consumer rape"
I have a PDA running under Windows Mobile 2003SE, corresponding to WinCE v4.2 or so, i.e., should be quite mature. Some of the design decisions of that OS are just mind boggling (not sure if they still apply to later versions).
Try to come up with the most absurd solutions to the following two questions (try be really creative to find the most bizarre solution) and see if you can beat the actual way it is in WinCE:
Q: How to implement Help files?
A: Help files are uncompressed HTML files located in the main system directory \Windows together with system .exe and .dll files. Images appearing in these help file are uncompressed bitmap files, likewise located in \Windows. Extra bonus points for giving these bitmap image files generic names so that they override other programs' help images of the same name for a funny effect.
Q: How to close a running program?
A: You can't. (Well, actually you could kill it using the task manager which requires 4 or 5 clicks, WinCE-compliant programs are not allowed to have a close button). The OS may automatically decide based on current use of resources to close a running program at any time.
I mean 20+ years of experience and all perfectly working C/C++ code and libraries have to be thrown out of window ? Cmon Google. Java is a nice toy, but unfit for production, get real.
Someone has never heard of JNI.
Relying on JNI (or P/Invoke in the .NET framework) has a few problems:
I agree with you that detecting whether the system calls are allowed is a problem. Describing it as a "VM" is probably wrong
There exist steps between "method X is a VM" vs. "method X is not a VM". For example, FreeBSD's jail mechanism just traps system calls, but people end up calling it a lightweight VM.
For instance some program that can update your web bookmarks could probably also insert or modify them all to spam addresses, I think it will be hard for the call detector to prevent that!
The idea is to grant privileges on your bookmarks only to specific applications.
Canonical got Android apps running on Ubuntu on x86, without recompiling or emulation, can you do that with C/C++?
Technically, you can't even run Android apps on an Android phone without emulation. The Java virtual machine is an emulator, as is the Dalvik virtual machine that Android uses.
Android OS crashes--??? Haven't seen it crash yet (since Dec 2008). Apps have crashed, or the phone needs a reboot due to lack of force close, but the phone recovers nicely on app crashes. Apps crashing on any of the above devices usually result in an OS crash as well.
.
There's a reason why VM's make sense. Especially when you're mobile. Nvidia is shooting themselves in the foot on this one.
Yeah, too much boilerplate is my main complaint with JNI. Never used P/Invoke or much .Net at all though.
All your base are belong to Wii.
on iPhone I have proper GCC/G++ compilers Which you can't use without jailbreaking, so your argument is instantly moot.
What are you talking about? Apple's iPhone SDK ships gcc/g++. C++ and C are both supported languages on iPhone OS X.
Don't blame me, I voted for Baltar.
"Given that Microsoft has offered us discounted product, and has threatened to raise the prices we pay for MS products as well as threatened us with IP infringement suits if we do not comply...we have decided that Windows is 'Oh so great" and nothing could possibly compare with Windows on any platform. We know most of you technically minded people will probably trash the problematic Windows OS in 15 minutes and replace it with a more stable, more flexible, and more powerful, free OS, but that is our story, and Microsoft is making us stick to it."
Open Source: Eroding the Digital Divide
We need to get ahead of the game by stopping thinking that the mobile, netbook, laptop and desktop are different devices in different boxes. Linux needs to stop bloating and apps need to be able to run in 640x480 NOW without having to edit a config file to allow you to drag an app off the top of the screen to get to its button at the bottom of the screen. If you really needed to have a minimum res of 800x600 then consider that the Amiga could have a desktop area larger than the monitor display area in the early 90s; moving your mouse to the edge of the screen would scroll you around the desktop, how hard would it be to allow that whilst still keeping the taskbar fixed?.
The HTC Universal (google it) blurs the phone, pda and laptop lines tremendously. It's a phone with built in wifi, ~128MB RAM, an SD card slot an ~500MHz ARM processor a 640x480 touch screen and a full qwerty keyboard. It's got practically the same specs of one of my top-of-the-line development machines from the 90s.
Currently it runs Windows Mobile 6.1. Android boots but doesnt accept any input, it just sits there. What would be great would be a super abstraction layer - hell it could just be a simple config file. Denoting addresses and types of inputs - so the d-pad could be instantly mapped to control the mouse pointer, so the keyboard's keys could be recognised and the phones extra buttons mapped to anything you like, and the wifi capability has a hex code pointing to it, as well as the GSM/G3/IR/Bluetooth capabilities. That way instead of having to massively rejig and recompile the OS to fit every device, and massively reconfigure it I could just stick the "slim" version on my smart phone and all the hacking i'd need to do to get it to work would be one config file that i could probably download from someone, or tick a box on the website when i download the OS's installer. The config file could a bit like the one that quake engines' use - in fact you could have a run-on-first boot applet that allowed you to press any button on your device and map it to anything just like quake too, move-mouse-left: (press button) 0x34 and even set up predictive texting for phonepad devices, or map keys (like function keys) to key combinations*.
So the finer points of each device would need proper C coding to get them to work (e.g. the HTC has a keyboard back light) but you could get close to actualy being able to use the darned thing and reduce a lot of pain in the process.
* this one's a particualr bug bear for me, someone ported UAE to Windows mobile but only allowed you to map the mouse and joystick... i had no way to map the function keys and so no way to load/save games in Bloodwych, which otherwise ran beautifully, big shame!
If you don't risk failure you don't risk success.
There is nothing simple about solving the system call validation problem.
It's not trivial, but it's far from difficult. Fair scheduling on SMT systems, for example, is a much harder problem for OS designers. System call validation is incredibly simple in comparison.
You actually end up writing a VM.
Not at all. SELinux, for example, is not a VM. Neither is systrace or virt. When you issue a system call, you perform an interrupt or a special instruction and the kernel takes over. The kernel then runs a privileged operation, for example accessing a file on disk, on behalf of the process in question. It is up to the kernel to decide the policy for this.
On all UNIX systems, for example, the kernel does not allow processes to open arbitrary files or bind to ports under number 1024 unless it is marked as privileged (i.e. running with UID 0). More modern UNIX-like systems and Windows NT allow much finer granularity, either validating the arguments to system calls (not easy to do in a way that isn't open to race conditions), or associating fine-grained permissions to all kernel objects (sockets, files, and so on) and granting or revoking them on a per-process basis. You only 'end up writing a VM' if you consider every modern OS kernel to be a VM (not entirely an invalid point of view, but not true in the sense that the JVM is a VM).
All the JVM does is intercept these at a higher level and do things like refuse to issue a system call for some subset of operations, for example opening a file that is outside a scratch directory, or opening a socket connected to any host other than a specific whitelisted one. All of these restrictions can be implemented for arbitrary processes on most modern operating systems (*BSD, Linux, Solaris, Windows NT, Symbian, and so on). You don't need a VM.
You are also forgetting about the problem of arbitrary memory pointers
No I'm not; they are irrelevant. All a program can do with an arbitrary pointer is modify or damage itself.
You don't have to break into the privileged kernel mode in order to break security
You are confusing two issues. One is arbitrary code execution, the other is privilege escalation. Java does nothing to stop arbitrary code execution. Various classes in the JRE allow you to generate code at run time so it's possible to use an application vulnerability to execute arbitrary code inside a Java application. The lack of pointers means that some classes of exploit are not possible but that's largely irrelevant because other entire categories are and you only need one exploitable hole to render a system insecure..
All you have to do is to read or write what you are not allowed to access.
You seem to be totally unaware of the fact that every relatively modern processor (e.g. every Intel chip since the 80386) has supported and every relatively recent operating system has implemented protected memory. Every arbitrary pointer that a userspace process has is a pointer in a virtual address space. These are either mapped to physical pages or they are unmapped. If they are mapped to physical pages, then the process has some set of permissions to access them. The only way of changing these permissions is via a system call (and then the kernel may or may not permit the change). If you attempt to dereference a pointer to a mapped page, you get access to that memory, but you can't do anything malicious to it (it's memory that you either allocated via mmap() or malloc(), or it's kernel memory that you have read-only access to in order to make some system call-like library functions faster).
If you try to access some memory that is not mapped, then the CPU issues an interrupt. The OS then handles this by either delivering a segmentation violation signal, or by killing the process.
There are exploits that depend on accessing arbitrary pointers,
I am TheRaven on Soylent News
why not try QNX which is a commercial offering? This is very suspicious. Sounds like the most closed useless thing ever. I go for N270/GMA950. Possibly if VIA really helps openchrome I have no problem to give it a try. Moreover the whole thing smells like early adopters saga. First version would be totally experimental, save for the calculator and notepad (I can suggest vi).
Tell that to my AT&T Fuze running WinMo 6.1, which spontaneously reboots at least once/day, and from which I send about 20 application exception reports to MSFT each week. Oh gee, "cprog.exe" or "device.exe" died again? Let me send that to Redmond and hope they have a project manager who gives a damn!
"Rock solid" my ass. I've had 3 WinMo phones; my next phone will be either an iPhone or Android-based. Windows Mobile is a steaming heap of shit. ...not that I would expect an executive of any non-trivially-sized firm to actually know anything about technology...
Is Capitalism Good for the Poor?
Doom for example uses a native JNI library.
In fact you can port any C/C++ application over to a android device like stock Tmobile G1, see this tutorial: http://davanum.wordpress.com/2007/12/09/android-invoke-jni-based-methods-bridging-cc-and-java/
I have just installed doom on my Tmobile G1 from the android app store, and it works well. No hacks necessary.
Google does support them, see Doom for android for an example. It even supports C/C++ within its web browser. See
http://google-code-updates.blogspot.com/2008/12/native-client-technology-for-running.html
> or do so only through clunky JNI
In what way is JNI "clunky"? And what do you mean with "unsupported api". C/C++ code has full access to the official API. See prboom for android for an example.
> Not sure if its intentional or not but in areas like media players it gives Google a degree of
> exclusivity
But I am sure that you have no idea what you are talking about!
Well whoopdy shit. You get support for 2 languages for the iphone. That's great if you can come up with an app that Apple doesn't deem: Distasteful, Offensive, or in competition with their own offerings. Their discretion is pretty arbitrary and i'd rather be tied to one language yet still have to power to offer my apps than have 2 languages and no guarantee that Apple isn't going to take down my app and put a clone of mine up a month later.
You know why C and C++ is fine for the iphone? The iPhone's OS runs only on the iphone, there is no need to worry about the code running on another architecture. As another poster pointed out that debian does a fine job with C code ports but if you are running an app store how many architecture binaries are you going to offer?
As for criticism of Java...I find most people on here who "hate" java are people who have never coded in their life or picked up C in 21 days and wants to be elitist about how much they can optimize "Hello World". Java ain't the java of 10 years ago, and between Servlets, Android, and GWT, to say the least, Java is a real powerhouse. Java's reputation is worse than a man who raped a child while yelling "nigger!" 10 years ago. Even people would forget about him but here in 2009 people still spew bullshit about java.
Windows Mobile is not the same as Windows CE. Windows CE is the infrastructure underneath Windows Mobile. You can't extrapolate between Windows Mobile features, devices, and most importantly *vendor support* to Windows CE.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
Look on the Google developer forums every time a developer has asked about direct access to the Surface API from native code. Google consistently tells you to not use the API, its going to change, your app will break... If you want to do an application that needs to do fast, efficient blits, like media players its relatively hard to do in Android unless they've fixed it recently.
In fact you can't access it without modifying the mydroid source, your C++ class has to be friend class to the isurface class. The only two classes and apps that are friended to it are Androids own media player and camera apps.
Its nice Google is supporting native code browser plugins but they pretty much have to do that to support things like Flash plugins but they still aren't as friendly to native mode apps as Apple is.
@de_machina
Word, my Sega Dreamcast runs WindowsCE, so I don't want my backwards capabilities to be hurt.
It has a modem, i'm sure i can use it as a cell phone.
Be seeing you...
Google just announced a Native Code Development Kit for Android:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html