The BusyBox slash forked Linux-based Android operating system is more popular than ever nowadays. Even though large parts of it are released under the Apache license, Android is far from completely free software.
Those who know me, will know about my skeptical opinion about proprietary binary blobs. I simply do not trust proprietary software to be safe, so I try as hard as I can to live a completely proprietary software-free life. I simply refuse to believe that proprietary software vendors do not have any bad intentions, and would not hurt my privacy if they could make bigger profits by doing so. You can call me paranoid; I just call it realistic.
On my computers, I am almost there. I primarily run Debian, and the only non-free parts I have installed are the Adobe Flash Player and unrar. Flash alternatives like Gnash and Lightspark just aren’t up to par with the “real” Flash Player, and the adoption of HTML5 video isn’t going as fast as I’d like it to go. Also, the last time I checked the open source edition of unrar, it wasn’t able to properly open many archives, although I haven’t looked into it recently; so things might have changed. Either way, in both cases I want to get rid of (the need for) the programs, so I really hope that it will become possible to do so in the near future.
Android, however, clearly shows a different mentality than ‘regular’ GNU/Linux. Even though the Android project itself is completely open source and released under the Apache license; many (if not all) Android developers could not care less about freedom. 90% of the Play Store is proprietary software, and after all those years, it still doesn’t offer an option to filter applications by license.
Instead of requiring developers to be clear about the license their software is released under, they simply regard it either as “free”, because the users do not have to pay any money for it; or as “paid”, because they do. Developers don’t even have to say a word about the license they chose, and I don’t like using the word “free” to merely indicate that something does not cost any money. I would call that “free of charge”; but by not having to pay any money, chances are that you are in fact the product being sold. I mean; animals to be slaughtered got “free” food and housing for their entire lives as well, and look how well that turned out for them.
Even most of Google’s own applications are not free software. In fact, there is not a single Android phone out there that is really open. Every hardware vendor adds its own proprietary frameworks (HTC Sense, Samsung TouchWiz, and so on), and Google applications like Gmail, Maps, Talk, Drive, Goggles, Translate, YouTube, and even the Play Store itself are all binary blobs, but are shipped with every phone and tablet (including the Nexus ones) regardless.
So it’s safe to assume that proprietary software has infiltrated even the core of the Android open source project. But what if we’d want to have our phones and tablets as “clean” as possible? Well, don’t get your hopes up. It is not possible to have a decent Android device without some proprietary parts. But it can be a whole lot less than how they come out of the box. It just takes some time and commitment; and you’ll only be able to install very few applications afterwards.
First off, you’ll need the hardware to be as open as possible. So, in short, you’ll need a Nexus device. If you care about freedom, Nexus devices really are your best option; both because you’ll obviously need to flash an aftermarket ROM, but also because most of the hardware drivers are free. As far as I’m aware, the only non-free driver on my Galaxy Nexus is the one for the PowerVR GPU. And we all hate PowerVR, don’t we? * cough * Intel Cedar View * cough *
I assume that most people know how to unlock the bootloader of a Nexus device and how to flash ClockworkMod through fastboot. If you don’t, check the internet. It’s really easy, and you do not need a proprietary operating system to do it.
Anyway, first things first: You’ll need to find an aftermarket ROM for your phone that consists solely of open source software. In my case, I chose CyanogenMod 10. You can get it by visiting http://get.cm and downloading the zip archive for your specific model.
After downloading the zip, you can basically flash it right away. As far as I’m aware, all parts are released under the Apache license (although I can’t confirm it for a few driver binaries), and the kernel should (obviously) be GPLv2. Even third-party parts like the T-mobile theming engine are in fact free software, as you can see here: https://github.com/tmobile.
There are some applications I tend to remove from /system/app prior to flashing the zip, but that is merely because I do not see the need for them. It’s not because they wouldn’t be safe to run. Still, if you’re interested, here they are:
– Browser.apk – I do not use the stock browser, so I have no need for this package.
– CMWallpapers.apk – This is a set of wallpapers by the CyanogenMod project. I don’t use them, and it only adds to the total ROM size. Then again, there is no harm in keeping them.
– Email.apk – I do not use any POP3 or IMAP e-mail accounts, so I have no need for an e-mail client.
– Exchange.apk – Yeah, you think someone like me would use Exchange?
– Galaxy4.apk – Live wallpaper; not my cup of tea.
– HTMLViewer.apk – Seems to be useless if you use an aftermarket browser.
– HoloSpiralWallpaper.apk – Live wallpaper; not my cup of tea.
– LiveWallpapers.apk – Live wallpapers; not my cup of tea. The LiveWallpapersPicker.apk might be useful to keep though, but that does not contain any wallpapers itself.
– MagicSmokeWallpapers.apk – Live wallpapers; not my cup of tea.
– NoiseField.apk – Live wallpaper; not my cup of tea.
– PhaseBeam.apk – Live wallpaper; not my cup of tea.
– Provision.apk – This is automatically removed by SetupWizard.apk anyway, so you might as well do it yourself.
– QuickSearchBox.apk – I personally never saw the need for a system-wide search client. Nearly every application just has its own searching functionality, and I do not keep enough stuff on my phone to need “one application to rule them all”.
– SoundRecorder.apk – This seems to have been broken for ages now.
– SpareParts.apk – Just a wrapper around the secret menus.
– Tag.apk – I don’t use NFC tags, and I haven’t been able to get this to work since Gingerbread anyway.
– Term.apk – This can also be downloaded from the Play Store, which is probably more up to date.
– VideoEditor.apk – I know better ways to edit videos than on an ARM-driven handheld device.
– VisualizationWallpapers.apk– Live wallpapers; not my cup of tea.
– VoiceDialer.apk – In my opinion, talking to electronic devices is very silly; unless you are blind or have no fingers.
– WAPPushManager.apk – I don’t use push messages, and I don’t like the amount of system access this application is given either.
However, there are also some rather useful parts missing from CyanogenMod, such as the Google Talk client, the ability to synchronize your Google contacts and calendar events, the network location service, and even the Play Store itself.
So, there is a separate zip which includes all of the Google-specific parts of Android, which can be downloaded from http://goo.im/gapps. One of these applications, you actually need; being SetupWizard.apk. If you do not install this package, the home button will not work; nor will the settings button in the dropdown menu, and many other bugs will show up because the device will never be properly configured. I am not completely sure whether it is non-free though; but I can’t seem to find any clarity about its license. It might be Apache-licensed after all, although some people claim the source code is not provided. I’m not an Android developer, so I don’t know for sure.
The majority of this archive however, is proprietary software. Most of the apks and libs are non-free, and I am not willing to take the time to investigate each and every one of them. So, I’m just going to find out how many of them we need in order to get a decently working Android system. And I can assure you, it isn’t much.
First of all, there’s the optional folder and the install-optional.sh script. These contain the proprietary Face Unlock packages and libraries. I find this to be a rather useless feature, and I don’t think it’s worth running proprietary software for it, so my advise is to remove them both.
Then we enter the /system folder, where we can essentially delete everything but the app and lib directories. None of the other parts seem to be required; I have a perfectly running system without any of them. I haven’t tested everything yet, but I believe it’s safe to say that all of this proprietary stuff is obsolete; or at least not required for anything I do. So you can remove addon.d, etc, framework, tts, and usr. Essentially, all the root of the zip should contain are the META-INF and system folders, and all /system should contain is the app and lib folders.
The contents of the /system/app folder are primarily a matter of personal choice. It really comes down to what you use and what you think is “worth the risk”.
I’ll start out with a list of things most people would want to delete:
– GenieWidget.apk – This is probably the single worst Android application ever made. I’m not even going to start about how much I dislike it.
– GoogleEars.apk – Seems to be some mechanism of recognizing pieces of music. I simply know what I’m listening to, so I don’t see why I would need this proprietary program on my system partition, having access to my microphone.
– GooglePartnerSetup.apk – The name alone is dodgy enough to get rid of it.
– GoogleTTS.apk – The CyanogenMod ROM already contains Pico TTS; whereas this application is for some reason not allowed to ship with it. I’m not sure about the license, but it seems to be restricted nonetheless.
– MediaUploader.apk – I have no idea what this does, but nothing seems to break when you remove it.
– Microbes.apk – Live wallpaper; not my cup of tea.
– OneTimeInitializer.apk – Pretty much the same as with MediaUploader.apk. I don’t know what it does, but it doesn’t really seem to be useful for anything either.
– QuickSearchBox.apk – This can also be downloaded from the Play Store, and will be equally functional. I don’t see the need of turning it into a system application if you don’t have to.
– Thinkfree.apk – Seems to be some kind of proprietary office suite. I’d rather wait for LibreOffice, and simply use my computers for office tasks in the meanwhile.
– VoiceSearchStub.apk – Seems to be useless with the current incarnation of the Google Search / Google Now application.
These applications are not always required, depending on your personal preferences:
– ChromeBookmarksSyncAdatper.apk – This is only useful when you use the stock browser. If you don’t, you might as well leave it out.
– GoogleBackupTransport.apk – If you want to backup your application settings to Google’s servers, you will need this package. I personally don’t like the idea of a proprietary program accessing all my data and sending it to servers overseas, so I do not use it.
– GoogleFeedback.apk – This sends crash reports to the Play Store in case something goes wrong. Sending system data through a proprietary package is not something I’d be willing to do.
– Talkback.apk – Seems to be a screen reader. I am not visually impaired, nor do I know anyone who is, so I have no need for it.
Finally, a list of packages you probably shouldn’t remove:
– GoogleCalendarSyncAdapter – This synchronizes your Google Calendar events with the local calendar application.
– GoogleContactsSyncAdapter – This synchronizes your Gmail address book with the local address book.
– GoogleLoginService.apk – Seems to be required to use any Google account functionality and synchronization features.
– GoogleServicesFramework.apk – Same as the above.
– NetworkLocation.apk – Let’s face it; proprietary as it may be, this is really useful.
– Phonesky.apk – This is the Play Store. Even if we use a system made entirely of free software, we still need this proprietary client to keep everything up to date. Ironic, huh?
– SetupWizard.apk – Everything breaks if you don’t have this installed after the initial boot. You can delete it afterwards, but don’t wipe your /data partition without putting it back first. Some say the Provision.apk from the ROM can take its place, but my experiences are different.
– Talk.apk – I personally find Google Talk to be really useful. In fact, it’s probably my second-most used application. Also, this used to be required in order for the Market / Play Store to work; although I’m not sure if that is still the case.
The contents of the /system/lib folder are as follows:
– libfilterpack_facedetect.so – Required for Face Unlock. If you don’t use that, you can remove this as well.
– libflint_engine_jni_api.so – Seems to be part of Google TTS. If you use Pico TTS, you do not need this.
– libfrsdk.so – Required for Face Unlock. If you don’t use that, you can remove this as well.
– libgcomm_jni.so – Obsolete. This is required for the Google+ application, but it is simply installed in /data/data/com.google.android.apps.plus/lib in case you download the application from the Play Store; so it’s useless to have it on your /system partition.
– libgoogle_recognizer_jni.so – Required for the Google Now hotword detection, although I’m pretty sure this will also just install in /data/data if you download the Google Search application from the Play Store. (I haven’t tested that.)
– libmicrobes_jni.so – Required for the Microbes live wallpaper. You should only keep this if you keep Microbes.apk in /app.
– libpatts_engine_jni_api.so – Required for spoken navigation in Google Maps.
– libpicowrapper.so – Seems to be part of Google TTS. If you use Pico TTS, you do not need this.
– libspeexwrapper.so – Same as the above.
– libvideochat_jni.so – Required for video chatting from the Talk client. If you do not have this library installed, attempting to make a video call will crash the application without further notice.
– libvideochat_stabilize.so – See the previous one.
– libvoicesearch.so – Required for Voice Search. Although I’m pretty sure it simply installs in /data/data if you download the Google Search application from the Play Store. (Haven’t tested that either.)
– libvorbisencoder.so – Encodes Vorbis files (duh). Required for the Google Ears application. In case you remove that, I don’t see another use for this library either.
I’ll also add a list of useful free/non-proprietary applications I’m currently using, with links to the Play Store and the source code.
AdAway – System-wide ad blocker
Play Store: https://play.google.com/store/apps/details?id=org.adaway
License: GNU GPL v3
Android Terminal Emulator – The name says it all
Play Store: https://play.google.com/store/apps/details?id=jackpal.androidterm
License: Apache 2.0
ConnectBot – SSH client
Play Store: https://play.google.com/store/apps/details?id=org.connectbot
License: Apache 2.0
OS Monitor – Useful system monitor; basically a GUI around top, networking tools, and dmesg/logcat
Play Store: https://play.google.com/store/apps/details?id=com.eolwral.osmonitor
License: GNU GPL v3
Obsqr – Very minimal and lightweight QR code scanner
Play Store: https://play.google.com/store/apps/details?id=trikita.obsqr
Superuser – A GUI around su; also part of pretty much every rooted ROM
Play Store: https://play.google.com/store/apps/details?id=com.noshufou.android.su
License: Apache 2.0
Ted – Text viewer and editor
Play Store: https://play.google.com/store/apps/details?id=fr.xgouchet.texteditor
You can check http://f-droid.org and http://trac.osuosl.org/trac/replicant/wiki/ListOfKnownFreeSoftwareApps for lists of free as in freedom Android applications.
Personally, I have only flashed the applications from the last category, and kept only libpatts_engine_jni_api.so, libvideochat_jni.so, and libvideochat_stabilize.so in the lib folder; giving me a grand total of eight proprietary apks and three proprietary libs on my system partition. I’d say this is about 5% of what the average Android user has.
Still, I have to admit that I’m guilty of using a few more proprietary applications. From the Play Store I’ve downloaded the Chrome browser, the Gmail client, the Google+ application, and Google Maps with the Street View extension. The Play Store also seems to insist on installing “Google Play services”; leaving me with a total of fourteen proprietary applications.
Other software I use are AdAway (GPLv3), the Android Terminal Emulator (Apache), ConnectBot (Apache), Obsqr (MIT), OS Monitor (GPLv3), Superuser (Apache), and Ted (MIT). And that’s it. I do not generally install any more applications from the Play Store, due to its lack of being able to filter by license. All of the other things I do, I do with the Chrome browser; which sadly isn’t completely free either. I’m still hoping Chromium will ever be released for Android, although I doubt it.
So in the end, having a completely free Android system is hardly possible. Not all the drivers are open source, and some really useful parts of Android aren’t either. Then again, I think my current setup is a lot safer than what most people have in their pockets all day.
Regardless of that, I still do not want to have a 3G connection, and I usually leave my phone at home when I go somewhere I won’t be needing it, or I at least turn it off while I’m on the road.
No Big Brother for me!
Reproduced By Kind Permission