Ten or fifteen years ago, things weren't so complicated for programmers. Want to reach consumers? Write some software that runs on Microsoft Windows.
Now developers face a daunting array of choices, and at itsthis week, Google will do its best to persuade them to bring their code to its favorites: Android and the Web.
How well Google succeeds will send ripples across the computing industry. It'll influence hardware manufacturers' choices for the operating system not just within your next smartphone, but also your car, your TV, your smartwatch, and your electronic eyewear. It'll also determine whether the Web ever truly fulfills its promise as a universal platform for software that spans all those domains and whatever comes next.
Apple has done a tremendous job convincing programmers to write apps for the iOS operating system within its iPads and iPhones, and despite the user-interface mess of Windows 8, Microsoft continues to be a powerful force on PCs.
For Google to succeed, it's got to answer the first competitive threat with its Android and the second with Chrome and Chrome OS. It's done well, but it's got big challenges in each domain. Here's a look at what Google's doing about it.
Android is bigger, but iOS comes first
Google's Android mobile operating system is a force to be reckoned with. Analyst firm Gartner said Android phones accounted for 78.4 percent of the 680 million smartphones shipped in 2014, well ahead of Apple's 15.6 percent share with iOS. For the 116 million tablets shipped, Android was ahead 61.9 percent to iOS's 36 percent.
Those stats don't tell the whole story, though. The Google Play store and Apple App Store each crossed the 1-million app mark last year, but for many programmers, iOS is easier to support and comes first on the priority list.
"We definitely develop for iOS first," said Russ Campbell, user experience designer for a fitness app called Nudge. "It's a lot simpler to develop for. There are fewer products, fewer screens sizes. It's easier to debug and make it consistent across devices."
Rosetta Stone, maker of foreign-language learning software, also started with iOS because they could build an app quickly then get feedback before reaching the broader Android market, said Chief Product Officer Nick Macey.
Programmers say iOS has a better emulator -- PC software that simulates a mobile device. Compared to iOS's tools, Android's is too slow for programmers who need to test their latest changes.
iOS users also are more active, added Phil Beane, who co-founded Nudge with Campbell. "Adoption is pretty level for us between Android and iOS. We do get a lot more consistent usage out of the iOS side," he said.
For programmers, higher usage translates to more money, especially with in-app purchases. "By and large, Android gamers do not pay as well in core games," said Jan Wagner, a Cliffhanger Productions programmer who just finished building "Aerena: Clash of Champions," a strategy game.
One Android problem is fragmentation, a term that refers broadly to the wide variety of operating system versions, screen sizes, processor types, memory capacity, and other parameters.
Fragmentation is a consequence of how Google chose to bring its open-source operating system to market. Where Apple tightly controlled its mobile OS, its device hardware, and the programming interfaces that developers use to tap into that hardware, Google offered Android freely to all comers. Today, thousands of Android phones are on sale from a handful of powerful device makers -- Samsung, LG Electronics, Motorola, HTC, and Sony, for example -- and scads of lesser manufacturers.
"There are literally hundreds of new devices each week. We aim for 75 percent device coverage, but that has become increasingly challenging," Wagner said. Even the consolidation of power into the hands of a few device manufacturers hasn't helped, he added. "It is an utter nightmare just trying to keep up with the most prominent phones -- not because of resolution or chips so much as because there are dozens of versions of the exact same phone."
The need to support the 3.5-year-old Android 2.3 Gingerbread version is fading, which helps reduce complexities. But even as users settle down onto phones running Android 4.0 to 4.4 -- Ice Cream Sandwich, Jelly Bean, and KitKat -- programmers likely will see more change as Google moves to its "L" dessert.
At Google I/O, Google could reveal details of Android's user interface future. One candidate: a purported Quantum technology that's part of a " Quantum Paper" plan to unify user-interface elements across Android, iOS, and the Web. Today, there's something of a disconnect between using, say, Gmail on the Web and Gmail on Android. Unifying the interfaces could make life easier for users, but it also could mean Android developers have to learn a new set of conventions for things like buttons, text boxes, and pull-out menus.
The good side of Android
In a way, though, Google took its lumps early. Apple's portfolio has fragmented a bit with the arrival of the iPad, the taller iPhone 5, 5C, and 5S, and high-resolution Retina screens. Google had to deal with screen-size issues as soon as the second Android phone arrived in 2009.
"Google has built a huge amount of tools to handle it," said Matt Dimmick, the product leader for navigation app Scout. "It's not like the early days, when you'd assume it's going to break. Now it's 99 percent you assume it's going to work, and you only worry about the 1 percent."
Another Android plus is the Google Play store for selling apps and handling customer feedback.
"The Android submission process is absolutely one of my joys of a platform," with a fast replacement cycles if there's a problem that needs to be fixed, Dimmick said. Other big perks: the ability to release multiple versions of an app, making it easier to support old hardware; detailed data on what devices an app uses in the real world, and the ability to respond directly to user complaints to track down bugs.
Google also trusts Android programmers more. They can, for example, write their own SMS-handling software instead of relying on the built-in app in iOS, and they can revamp the unlock screen. Apple is opening up a bit, for example allowing custom keyboards in the upcoming iOS 8, but in general, it keeps a tighter rein on developers.
At Google I/O, the company will show off technology that could speed up Android apps and let them handle multiple tasks at the same time. The improvement comes through a change in the "virtual machine" underpinnings of Android -- the software layer actually responsible for running apps.
From its inception, Android used a Java-esque virtual machine called Dalvik, but with KitKat in 2013, Google will break its ART silence at Google I/O with a progress report.-- short for Android Runtime.
Polymer and the adaptable Web
Before Android stole the limelight, Google I/O was all about Web programming, and that domain remains a priority at Google. Chrome and Chrome OS, like Android, are vehicles to deliver Google's users to online services.
With Google Apps, Gmail, and Google Maps, Google helped drive the Web toward a more interactive design. It's also allied with browser rivals Mozilla, Opera Software, Microsoft, and Apple to try to advance the Web standards that are designed to bring that interactivity into the hands of Web programmers. Those standards, while slow to arrive, have made the Web steadily more useful when it's time to search for nearby hotels on a map, upload and caption a bunch of photos on Facebook, or play Cut the Rope online.
But programmers themselves weren't always in the loop when browser makers hammered out new standards. Now Google is championing a new approach that gives Web developers new power, and it'll be showing progress in that domain at Google I/O.
The approach, embodied in an influential 2013 document called the Extensible Web Manifesto that has support well beyond Google, seeks to supply programmers with low-level access to browser abilities.
"The idea of the Extensible Web Manifesto is to open up more low-level primitives (with appropriate security, of course) so that people can build what they need on top of that," said Bruce Lawson, a developer evangelist with Opera. "Then, when we see what people really need, and really do, it can be retrospectively standardized and built in natively to browsers."
That contrasts with some ill-advised Web standards like AppCache, which did a poor job meeting actual developer needs. In the new vision, programmers will fabricate their own building blocks, called Web components, then assemble those into a website or Web app.
Web components rely on a number of newer standards -- Shadow DOM, for example, which lets a programmer encapsulate attributes of a Web component so they don't mess up the rest of a Web page. The problem is that not all browsers support all those standards, but Polymer includes pre-written software to supply that support so Web components fans can use the approach sooner.
Polymer Designer goes a step further, making it easier to actually build those Web components.
Expect to hear lots about Polymer at Google I/O, starting with a talk by Matt McNulty -- an engineer who led work on WebOS, a respected but ultimately commercially unsuccessful operating system that relied on Web technologies.
The extensible Web is a big deal for programmers, but it could help ordinary users, too, by enabling more sophisticated interfaces and giving Web apps the visual appeal of native apps. In the long run, that would make the Web a more viable competitor with apps running directly on Windows, iOS, Android, or other operating systems.
Web components and the extensible Web carry the potential for big change on how the Web is built, said Artem Zakharchenko, a programmer for online photo editor site Pics.io.
"This is a natural evolution. The emergence of such manifestos is always triggered by the developers' interest. That forms a foundation for rapid evolution," he said. "We believe it can change the approach to Web development."