Above the clouds with Android

Cloud computing and the Android software stack

The open source Android operating system has taken the world by storm, allowing sophisticated cloud computing applications to run wherever you are. Designed to be highly efficient on battery-powered devices like the T-Mobile G1 smartphone, at heart, Android is Linux®, and there are several layers to the Android programming model that permit the creation of secure applications tailor-made for cloud computing. Soar to new heights with Android and experience mobile computing as you've never experienced it before.


Bill Zimmerly (bill@zimmerly.com), Freelance Writer and Knowledge Engineer, Author

Bill Zimmerly is a knowledge engineer, a low-level systems programmer with expertise in various versions of UNIX and Microsoft® Windows®, and a free thinker who worships at the altar of Logic. Bill is also known as an unreasonable person. Unreasonable as in, "Reasonable people adapt themselves to the world. Unreasonable people attempt to adapt the world to themselves. All progress, therefore, depends on unreasonable people" (George Bernard Shaw). Creating new technologies and writing about them are his passions. He resides in rural Hillsboro, Missouri, where the air is fresh, the views are inspiring, and good wineries are all around. There's nothing quite like writing an article on UNIX shell scripting while sipping on a crystal-clear glass of Stone Hill Blush. You can contact him at bill@zimmerly.com.

17 March 2009

Also available in Russian Japanese Portuguese

In an industry awash in cutesy metaphors, it's no surprise when another one pops up and grabs the popular imagination of creative business and IT people. Cloud computing is one such metaphor, and it has — pardon the expression — taken the world by storm. But what exactly does it mean?

Clouds, of course, consist of a huge multitude of particles of water vapor numbering in the hundreds of millions. Clouds have no central control and basically go where the wind blows. From this perspective, the Internet's multitude of client and server computers coupled with the many different purposes and controlling entities that drive the progress of it resemble clouds. Couple this with the wireless-data revolution that the cell-phone companies have brought us, and it does indeed seem like we're all awash in an invisible "cloud" of computing power.

Since the dawn of electronic computers, there has been a clear division of labor between the four main functional parts of a computer:

  • Input/output (I/O) devices that provide the human-computer interface
  • Central processing unit
  • Volatile random access memory (RAM)
  • Nonvolatile memory

The first three parts put the "computing" in computers. It is in the fourth part, where the valuable data assets are typically stored, that has changed most radically with the advent of cloud computing. Valuable data assets reside in nonvolatile memory so they are protected against the loss of electrical power — regardless of whether the loss is deliberate. Typically, nonvolatile memory devices are hard disks, but they can also be solid-state devices like secure digital (SD) cards and even magnetic tape devices (all but obsolete now). But such storage devices have their limitations.

Time marches on, technology has progressed, and along came computer networks, on which an organization's valuable data assets can be centralized in a computer shared by multiple terminals and backed up regularly as a necessary base IT function. This model (known as the mainframe model) offered many advantages — one being that it lightened the load each terminal location had. Small offices with little more than a tiny terminal (keyboard, mouse, display, and PC) could access gigabytes of company data and the processing power of large mainframes without cluttering up the place — so long as they were tethered by wires.

The next big paradigm shift came along with the network of networks we affectionately know of as the Internet, where absolutely gargantuan computer systems (local networks) can service huge populations of tiny terminals anywhere in the world a satellite dish can be raised. The wireless remote nature of this configuration came to be known of as the cloud.

Then along come personal digital assistants (PDAs), mobile phones, and smart phones, where the miniaturization of computers has progressed to the handheld form factor we know and love so well. Suddenly, smart terminals are in the hands of countless millions of productive people, producing and consuming information at prodigious rates.

In the mid- to late 1990s, e-mail and the World Wide Web were the most popular applications to dominate the cloud. Most people interacted with the cloud using a Web browser and understood the Internet to be a relatively simple application. With the advent of commercial successes like Yahoo! and Google, terabyte servers and network connections have replaced local hard disks as the preferred nonvolatile storage devices. Just as many forward-thinking visionaries predicted, the cloud has become a modern utility like water, phones, and electricity. Using the mobile-telephone digital network as a primary Internet Service Provider (ISP), the cloud grew to use millions of tiny handheld devices as the main tool for displaying the data residing on those servers.

Just as clouds move about and are altered by the winds of change, so have the paradigms under which these devices operate — the terminals have become smaller, more powerful, and far more portable, while the servers have likewise become more powerful and better capable of servicing users' data needs through the virtualization of software and the metering of its usage.

Companies no longer need to maintain large and costly server "farms" round the clock when there is another less-expensive alternative: contracting out those services through vendors like Google, Amazon, and IBM®. Through virtualization, applications that formerly ran in custom environments can be duplicated, or "imaged," to run in the cloud on the vendor servers. And with the proper metering of those services, the company will not need to pay peak prices for those times when its services are being minimally used.

As hardware technology marched on, so did software, and we have seen the creation of new applications. For example, location-based services that map out businesses close to where the cell tower or built-in global positioning system (GPS) determined you are. New markets cropped up for downloading and testing useful programs and data files, such as the Android Market and the Amazon MP3 Market for purchasing and downloading music. No doubt, we'll see further advances in these unique new applications of cloud computing — for example, companies could sort out and select regional contact information, then automatically transfer today's list of cold calls to the regional salesperson's Android-based mobile phone while he sleeps.

Cloud computing, where portable devices complement powerful servers, requires an operating system that maximizes what the server architects and programmers can do on a small client machine. Android is such an operating system.

The Android architecture

First and foremost, Android is a software stack for mobile devices. This means that high on the list of priorities is the preservation of battery power and the efficient management of limited memory resources. There are five distinct layers to the Android system stack:

  • The Acorn RISC Machine (ARM) Linux core forms the solid base upon which all the other layers stand. Linux is a proven technology that is highly reliable, and the ARM processor family is known for high performance on very low power requirements.
  • The libraries provide the reusable and sharable low-level code for basic functions such as codecs— software for coding and decoding digital sound and video — functions for the presentation of rich graphics on a small displays, secure shell support for encrypted TCP/IP traffic into the cloud, as well as component support for Web browsing (WebKit), SQL database functionality (SQLite), and standard C library functionality you would expect in a Linux system.
  • The Dalvik run-time byte-code interpreter, which strongly resembles the Java™ language byte-code interpreter, adds a few distinct features that uniquely define the security and power-preserving model of Android. Every application currently running, for example, has its own user ID and its own copy of the interpreter running to strictly separate processes for security and reliability.
  • The Android application framework enables you to use and replace components as you see fit. These high-level Java classes are tightly integrated components that define the Android API.
  • The Android core applications include the WebKit browser, Google calendar, Gmail, Maps application, SMS messenger, and a standard e-mail client, among others. Android applications are written in the Java programming language, and you can download many more from the Android market on the fly.

Each Android application can be further subdivided into distinct functional units:

  • Activities
  • Intents
  • Services
  • Security model


Activities are the components of an Android application that extend the Activity base class and define an interface consisting of a View that responds to Events. If an application consists of three windows (for example, a login window, a text-viewing window, and a file-viewing window), each is typically represented by a different Activity class.

Android maintains a history stack for every application run from the home page, and you can click the Back button to scroll back through this history of activities.


Intents, like activities, are a special class of application code that describe and define what an application wants done. Intents add a layer of indirection that enables sophisticated component reuse and substitution. For example, an application may present a button labeled Clients that, when clicked, displays a list of contacts that are your clients. And here's where the indirection comes in: You need not use the default viewer for those contacts; instead, you can substitute a different viewer.

For some applications, this can be a very powerful application-integration function. Perhaps a topographical map is better for a particular display than the default map view.

Classes such as a BroadcastReceiver define code that will execute when external events trigger them. Events like a timer going off or the phone ringing can be monitored in such a way. Typically, code like this doesn't display a window, but can use the NotificationManager class to alert the user that something needs attention.


A service is an application that runs at a low level and without a display or UI. It is usually an application that is expected to run for a long time in the background. A perfect example of this is a media-player program playing a play list of songs. Although a media-playing application will present a UI allowing users to define their play lists, the program hands off control to the service to actually play the songs in the given play list.

Security model

The security model of Android only allows programs to have their own data. If programmers want to share data among several diverse programs, they can define content providers for this purpose.

The package android.provider defines classes and interfaces that allow applications to read many built-in Android databases. Information such as contacts, photos, and songs are easily shared among applications with these interfaces.

The power of open source should never be underestimated, just as the power of a free and creative people shouldn't. Unfettered by proprietary APIs and company interests that often impede the progress of software engineering, the Android platform has a large and very active developer community whose combined talents truly make the sum greater than the parts. Want to empower your programming career? Learn to program on the Android platform, and you will someday have millions of mobile phone users in your potential market — some of whom may have a need for your program.

The heart of Android is ARM Linux. That alone should inspire confidence in the ability of this platform's importance to grow quickly. Linux is a fast and secure operating system with many thousands of programmers familiar with it. Many Linux-based systems are known to have an uptime of consecutive years being connected to and servicing requests in the cloud — and that truly defines reliability.

The development environment: Eclipse, Windows, Linux

Programmers have several choices when it comes to their Android development environment. They can use Microsoft® Windows® XP or Windows Vista®, Macintosh OS X (V10.4.8 or later, x86 only), or Desktop Linux (Ubuntu preferred). There is a downloadable software development kit SDK for all of these commonly used operating systems.

You can use a GUI IDE like Eclipse or Sun Microsystems' NetBeans, or you can use the proverbial "real programmer" method of the command line and a standard editor. The choice is yours.

The Android community encourages communication and so do the companies behind the creation of Android — Google, HTC, T-Mobile, and other members of the Open Handset Alliance Project. Open truly means keeping lines of communication between people (programmers, users, marketeers, etc.) open, protocols open, and programming APIs open.

Organizations can also put proprietary programs and data on Android, thanks to the kinds of software licenses used. This keeps them from running away from the platform, but also doesn't limit the choices consumers have. It's a win-win combination all around.

Get going with the Android SDK

The first task for anyone interested in developing for Android is to download and install the Android SDK (see Resources). Now, you're ready to program! There are as many ways to begin programming as there are programmers. Some, myself included, like to study all they can before beginning to code. Others like to jump right in and follow the tutorial examples given by the comprehensive Android documentation. But wherever your inclinations lie, you must eventually code something. To get started, check out Android's twist on the quintessential Hello World program (see Resources for the "Hello Android" sample application).

Developer resources

There are numerous resources in the cloud for Android development, including several wikis and Android community forums, as well as several Android programming blogs. The main company driving the Android phenomenon, Google, is at heart a communications company and so has several helpful forums (known as Google Groups) for communication among developers of different skill sets and talents.

The Android links in the Resources section can't even begin to show how vast the Android universe is. Cloud computing — and Android in particular — is hot, hot, hot.

Keeping our heads in the clouds: An eye to the future

IBM is working hard to create two large cloud computing centers in Research Triangle Park, N.C., and Tokyo. Access to the services that power your custom cloud computing applications are as simple as visiting the center Web sites and exploring what IBM can do for you (see Resources).

You can write your applications to take advantage of the cloud, where backup and restore facilities are automatic and skilled engineers are available to make your visions a reality. Picture your Android cell phone as merely an extension of IBM's collective computing power. While sitting in a coffee shop sipping your favorite latte, what would you want to see on your handset? Cash-flow diagrams? Portfolio data and graphs to show their growth? Perhaps the latest image data from NASA, run through your custom filtering program on a very high-speed parallel-processing server last night? Maybe the current earthquake data direct from the National Earthquake Information Center, or just plain old who won the NBA championship last night? The data is "out there" and the processing power to make sense of it is, too: All that is needed is for you to make it happen.

Time will tell what innovative new cloud computing applications are created in the coming years with everyone standing on the shoulders of the giants preceding them.



Get products and technologies



developerWorks: Sign in

Required fields are indicated with an asterisk (*).

Need an IBM ID?
Forgot your IBM ID?

Forgot your password?
Change your password

By clicking Submit, you agree to the developerWorks terms of use.


The first time you sign into developerWorks, a profile is created for you. Information in your profile (your name, country/region, and company name) is displayed to the public and will accompany any content you post, unless you opt to hide your company name. You may update your IBM account at any time.

All information submitted is secure.

Choose your display name

The first time you sign in to developerWorks, a profile is created for you, so you need to choose a display name. Your display name accompanies the content you post on developerWorks.

Please choose a display name between 3-31 characters. Your display name must be unique in the developerWorks community and should not be your email address for privacy reasons.

Required fields are indicated with an asterisk (*).

(Must be between 3 – 31 characters.)

By clicking Submit, you agree to the developerWorks terms of use.


All information submitted is secure.

Dig deeper into Open source on developerWorks

Zone=Open source
ArticleTitle=Above the clouds with Android