Have you actually built and installed AOSP on a device? If you have you might not completely agree with that statement above because without proprietary firmware and closed sourced device drivers those devices often become unusable.
That is completely ignored by your post. Is it on purpose?
JBQ (their AOSP "liason" to the community even quit over that issue) -- people complaining that open isn't really that open.
I understand Google though. They don't design all those sensors and drivers and all the hardware but have other manufacturers make the devices who buy components from others and so on. So they don't have a choice. But regardless of blame assignment here, I can't honestly say the system is completely open.
Now if you are Amazon or Microsoft, ok, you can find a hardware builder with its own custom drivers just for your device, then forking could work out. But for enthusiasts and experimenting you need to download the proprietary drivers to get a usable device, simple as that.
>Have you actually built and installed AOSP on a device?
Yes. I work with embedded Android at the driver and framework integration level. This is my every day.
I'm not really concerned that someone can't load AOSP on some cheap AT&T subsidised phone. Does that make the framework less free? No, that means they have non-free hardware.
I couldn't even load it on Nexus device without proprietary drivers. Some of which were not released for quite a bit. Those are not just Chinese knock-off those are Nexus devices.
> No, that means they have non-free hardware.
My Lenovo laptop is also non-free hardware, it works very well without closed source drivers.
Right, and they haven't made all these other Android devices work. So, "Android is open source" statement is only true with some major fine print attached to the bottom. That was my point and I was trying to clarify the misconception.
Would that be the same Lenovo range that gets regularly recommended for use with Linux because, unlike many others, it works well with Linux? If so that rather undermines its relevance here.
Have you been able to get GLES 2.0 working on an AOSP device with manufacturer provided drivers? Do the modern rendering features like renderscript work? What about audio and video codecs (like h.264, etc. not the PCM codecs)? Do common downloadable games that depend on 3D features work? Are they playable?
AOSP is great to bring up on a framebuffer-based device, but that gets you as far as an Android 2.0 launcher.
Any idea if Chromium can be build for AOSP with similar features as Chrome on Android?
I've reread my comment and am trying to see where I was critical of Android.
AOSP is open source, and it has parity with commercial distributions of Android in a number of areas.
I have been working with Android and Linux on Qualcomm MSM-based devices for a few years, navigating their portal at codeaurora.org, tearing into Android kernel commits and following the upstreaming process. The changes that Android makes to Linux are minor, and most of the them have been merged into the upstream kernel in some form.
The Linux framebuffer started out as a device wrapping the memory-mapped display memory of the Amiga and similar RISC devices, then it was ported to the Netwinder, which was an early embedded ARM computer in a screen. It has a minimal set of operations for accelerated graphics, it can do fast fills or clear the screen for instance. It does not support 3D graphics, it does not support most of the 2D primitives that X and the Android rendering libraries (such as surfaceflinger) require. Android had an extended protocol for using some of the features to enhance fast blits of of data from an offscreen buffer to the main display buffer. This was implemented using IOCTLs on top of the framebuffer, and by reusing some of the features in a different way.
This is sufficient to get you a basic Android launch screen, you won't get the 3D launcher screen, you won't get the enhanced gallery plugin, you won't get fast Google Maps/Earth rendering, and you won't be able to play 3D games. For that you need a 3D graphics driver. Most of these drivers are tightly controlled by the company that makes the chip, are closed source, and are not readily reverse engineered. Some projects have made progress, but it's been a slow process. LIMA is an implementation of the ARM Mali driver for instance. Recently, Nvidia submitted a patch to Nouveau for their Tegra device. This breaks with years of not cooporating with development of 3D drivers for their devices on Linux, and has the potential for a bright future of AOSP 3D graphics support on Tegra devices.
Ha, no problem. I was actually asking your experience with those things.
I am a little critical of people declaring Android great because it's open, while ignoring the limitations of AOSP. Unfortunately, this is a trend for or against many popular platforms where emotional responses replace reasoned consideration of the pros and cons of the products.
I've seen this a lot in discussions around Android, iOS, and Windows Phone. I prefer to inform and learn more about the platforms and use that discussion to shape my internal image of the state of the mobile industry. I care about the good features of Windows Phone. I care about the negatives of closed source drivers on Android, even as I'm aware of the limitations that Google's Android business had at the time that these decisions were made. I consider the iPhone, when it was released, to be very positive step forward and superior to pretty much every device a normal consumer would consider at the time. The willingness to seize control from the carriers, support apps from developers that couldn't afford the licensing fees and restrictions for BREW, and the limited number of phones that it supported, and revolutionize mobile OSs toward a modern graphics rendering, interaction, etc. was a huge boon to the industry. But I'm also willing to criticize the control Apple has over the choice of applications they distribute for competitive reasons. I want the ability to install any app I wish on my device. I want the ability to build applications for my device without joining a paid program, or being limited in who I can share my developed app with. I want to be able to choose the license my code is released under while still being able to distribute it in the most used venue.
I want a device with integrated services, but I want to choose which services I use.
I want full 3D support in open source so that anyone can go out there and build a new experience for their device from the ground up, and not be limited to the one that Android provides. FirefoxOS on every device, Ubuntu Mobile, Open WebOS, and plain old X.
I don't see the point of criticizing Android itself for lacking open 3D drivers, I use a Samsung Galaxy S4, Google services, Google Play, and the Chrome browser. (As well as Firefox for Disqus sites, for some reason.) But I don't see myself using AOSP as delivered.
> I am a little critical of people declaring Android great because it's open
I am in the same boat (I made the original comment referring to the drivers). Now it is partly through my own ignorance. I assumed if I just followed the steps to built and install AOSP (plus some patches I was trying out), I would have gotten a functional Nexus 7, minus all the google apps of course. Well rotation sensor, and other wasn't working, GPU was slow, other stuff was crippled. The device was basically not usable very much.
Now yes, Android on a scale is a lot more open than say Apple products for kudos for them. But at the same time the fine print associated with AOSP is a little too much for the project to be proclaimed completely "open".
>Have you been able to get GLES 2.0 working on an AOSP device with manufacturer provided drivers?
No. This is a problem that extends far beyond Android and existed before it showed its face on the scene. Non-free graphics drivers are common on desktop Linux too.
So write your own open source reverse engineered drivers or find a manufacturer that gives you docs for their sensors. It's what the Linux crowd has done for a decade now. That's what hacking and tinkering are all about. They are doing free and open Adreno drivers for example. Also Tegra. Saying Android is not open source because it doesn't come with open drivers for all current and future hardware is just plain impractical. It just means you want everything in your plate. It doesn't mean Android isn't open.
Edit: Noticed people might be taking offense to my strong wording.
Quite, but by the time you finish that the next generation is out and everybody has moved on.
The same thing happened with the HTC devices and Linux ports, it took years to get a port working and by the time it did everybody had a newer Android device (or whatever). A few people still use the HD2 and I still see questions on our (HTCLinux) Facebook page from people, but, for the most part, even XDA has moved on.
The 'current and future hardware' part is what Linux is really about, it's an abstraction layer over the specific hardware so that the user experience can be implemented once and used on many devices. Unfortunately, the lack of support for current 3D hardware means that the abstraction is incomplete. The development processes of the OEMs also break this abstraction, with everything build around one version of the kernel, one version of the phone HAL, one version of the camera driver and module, and the rest. Android, as delivered by OEMs, is not designed to adapt to other hardware. It's open in the sense that the core code is available, but not in the sense that the higher layer can be used as is on a new device.
Support for future hardware is not neccesary, but a profile that allows that hardware to be used once drivers are provided is desirable. This requires a strong abstraction between the Android userland and Linux kernel, GLES with standard DRI/DRM interfaces, UVC for the camera module (or an SoC-specific open specification much like ASoC is for audio), standard IOCTLs and sockets for network devices (wifi could use net80211 for instance), upstream Bluetooth stack including WiPHY, HE, and LE support, with working A2DP audio routing, input devices with valid metadata in the driver so they can be probed, supported flash filesystem, and probably some others.
Then Google takes this and builds a set of tests that verify that these requirements have been met, and states that the next 3 versions of Android will use this base.
They also provide an ABI guideline (so version) for the phone interface, the audio playback, sensors, and other aspects provided by libhardware. They make the same commitment: the next 3 versions will require this so version of libhardware.
The OEMs get this set of guidelines and build a device to meet them, passing the tests provided by Google.
Then Google releases an OTA version of Android that works on top of this base. Then they release another, and another.
As features require it, they amend the guidelines, adding NFC for instance. Not all devices support NFC and on those that don't, the functionality is not exposed by Android.
>Android, as delivered by OEMs, is not designed to adapt to other hardware. It's open in the sense that the core code is available, but not in the sense that the higher layer can be used as is on a new device.
Don't you think that's more due to the way ARM / mobile hardware scene is than due to Android? There isn't something like a BIOS or ACPI type of standardization to make that kind of thing happen. Also the pace of obsoletion is way faster in the mobile space than it ever was in the PC space.
Initially it was, but Android/Google have become the establishment. And ARM-based devices are becoming our general-purpose computing devices. Having an option for running the software we choose is the question of whether we have open computing device in the future.
There actually is a solution at the hardware/firmware/driver level now, the ARM Linux community has adopted DeviceTree, actually a varient called FDT, and drivers have migrated from the one-off platform buses to FDT. Even vendors like Qualcomm are embracing it and the time to upstream is falling.
As far as bootloaders, there are a number of open options. also don't personally see anything wrong with EFI on ARM, as long as there is a way for the end user to choose what signatures are accepted when booting software. A standard for describing memory layouts independent of hardware is important, as that allows for the newer multi-SoC ARM Linux kernels along with DT for defining the hardware and what driver should bind to what hardware device.
There are standards that exist at this layer, as long as the OEMs and SoC makers adopt them.
The basic concepts of SoCs are not being obsoleted, and the basic set of devices that need to be present to boot a system are not really changing that much, specific buses are changing, better DMA mapping is supported on newer hardware, including IOMMUs, but the basic concepts are still pretty much the same.
My proposal takes place at a different layer though, and is more focused on the fragmentation problem of Android.
Essentially you have an ARM ABI standard which defines what registers a call into the Linux kernel uses, this used to be more complicated with multiple ARM ABIs. Now it's pretty simple and ARM binaries on Linux work across devices, across SoCs, across Android OEM vendors. This is not much better or worse than the same compatibility on x86/x64.
The issue lies in the "expanded ABI," the suite of drivers, libraries, daemons, configuration, RPC procedures, hardware specific IOCTLs, and other particulars of each OEM's hardware. A Samsung camera APK isn't going to work on a device with a different sensor, even though they are both coded to Android's camera APIs. They might handle zoom differently, or lighting. They might handle sending the uncompressed stream to the DSP differently, or drawing into the LCDC different for real-time previews. They might handle flash timing differently. But what would happen if this was a plugin for the standard Google or even AOSP camera instead? What if this was a defined API/ABI that CyanogenMod could use on that hardware, or Firefox Apps with embedded WebAPI camera media source and canvas? What about capturing from the command line with something like uvctool?
Numbers like 4.4 at 2% (from another story today) should scare Google. It should scare them when apps built for Chrome Mobile don't work on all Android devices. It should scare them when the improvements made to Google Now won't be usable by an overwhelming proportion of their users. It should scare them when others like Yahoo and Mozilla can come in and poach Android users stuck on an outdated version of Android and build alternatives economies on their own (Google's) partner's flagship devices. And they should respond by competing.
Have you actually built and installed AOSP on a device? If you have you might not completely agree with that statement above because without proprietary firmware and closed sourced device drivers those devices often become unusable.
That is completely ignored by your post. Is it on purpose?
JBQ (their AOSP "liason" to the community even quit over that issue) -- people complaining that open isn't really that open.
https://plus.google.com/+JeanBaptisteQueru/posts/9HHRURorE7g
So it is not just me raving about.
I understand Google though. They don't design all those sensors and drivers and all the hardware but have other manufacturers make the devices who buy components from others and so on. So they don't have a choice. But regardless of blame assignment here, I can't honestly say the system is completely open.
Now if you are Amazon or Microsoft, ok, you can find a hardware builder with its own custom drivers just for your device, then forking could work out. But for enthusiasts and experimenting you need to download the proprietary drivers to get a usable device, simple as that.