Windows Phone 7 Marketplace Statistics

JustinAngel

Hi folks,

We’re all on constant voyage to better understand Windows Phone 7 and its delicate Consumer<->Developer balance. As part of that education I’ve download all Windows Phone 7 marketplace XAPs, performed analysis on them and am now sharing statistics with you.

Downloading the WP7 Marketplace

Some of you must be thinking to yourselves “Self, how exactly did Justin download all WP7 XAPs? And is that ‘ethical’?". For the last year or so it’s been well known among WP7 developers that the WP7 marketplace API allows to freely download XAPs. By employing basic network profiling on the Zune Desktop client it’s possible to find the endpoints allowing users to download XAPs.

Is the Marketplace API permanently public?

No. Starting with Mango all WP7 XAPs downloaded from the Zune Catalogue are going to be DRM encrypted. So, Mid-August was a great time to start downloading the marketplace and perform freeform analytics. In the Mango versions of the Zune Catalogue XAPs are still downloadable, but cannot be explored since they’re DRM protected.

I suspect this blog post is going to be the first and last independent analysis performed by a 3rd party on the Windows Phone 7 marketplace.

Statistic #0: How Many apps in the marketplace?

We often here numbers on the quantity of the overall Windows Phone 7 Marketplace. Latest numbers shared on a multitude of websites called out 30,000+ apps in the WP7 marketplace. Unfortunately, I could not locate all these apps through the Zune Catalogue. That means that either everyone has the wrong number, or I did something wrong.

In this blog post we will only be analyzing 24,505 applications available on August 14th 2011. Those are either all WP7 apps, or these are hopefully a representative sample group of the entire WP7 marketplace. One option is that the WP7 marketplace has 6,000 apps than previously publicized by 3rd parties.

Statistic #1: Obfuscated Apps vs. Not obfuscated apps

Since the current WP7 marketplace allows downloading XAPs you might ask yourself “Hey myself, Justin is making me uncomfortable. My apps aren’t obfuscated. Am I alone?”. Rest assured that you are in-fact not alone and 97% 85.5% of Marketplace apps aren’t obfuscated. For those unaware Obfuscation is essentially scrambling source code prior to shipping it with the goal of making it difficult to reverse engineer. Apps that are obfuscated would be significantly harder to reverse engineer.

The common (and only?) obfuscation tool for WP7 is DotObfuscator. The use of DotObfuscator often leaves files with the “DotObfuscator” brand in the final XAP. As a result we can easily iterate over all XAPs and see which one is obfuscated and which is not.

Update 10/3/2010: Sebastian Holst of PreEmptive has done a similar analysis to mine by downloading the entire WP7 Marketplace and found the real number of obfuscated XAPs to be 14.5% of the entire WP7 marketplace. Instead of looking for XAPs with “Dotfuscator” files , Sebastian looked for the [DotfuscatorAttribute] in the app binaries. That’s a significantly better metric to measure the total number of obfuscated apps in the WP7 marketplace. Read more about Sebastian’s analysis on his great blog post on the topic.

Statistic #2: Silverlight vs. XNA

When discussing the Windows Phone 7 dev ecosystem there’s always the friendly collaboration between XNA devs and Silverlight devs. The way I understand the XNA and Silverlight divide is that XNA is great for games and Silverlight is great for everything else.

The question then arises, what’s the adoption of both technologies in the Windows Phone 7 Marketplace?

Silverlight accounts for 90%~ of the Windows Phone 7 marketplace and XNA accounts for 10%.

It’s important for me personally to note that this isn’t a victory or something to lord over XNA devs. XNA is an important piece of the WP7 ecosystem and a critical part of the consumer landscape. As a friend of mine anecdotally said “All the great informative apps in the world don’t matter if you don’t have Angry Birds”.

Statistic #3: Programming Language of choice

Ever since .net came into existence there has been a healthy tension between C# and VB.Net developers. By looking at which XAPs contain Microsoft.VisualBasic.dll and FSharp.Core.dll we can learn what programming language is used by WP7 apps.

With the entire WP7 marketplace only 1% of apps is written in VB.Net. Additionally, amongst Top 2,000 WP7 apps there no apps written in VB.Net or F#.

One possible explanation to this disparity between C# and VB.Net & F# is that the WP7 V1 tools didn’t officially support VB.Net and F#. While it was technically possible to develop WP7 apps with VB.Net and F#, it wasn’t supported as a project type in the default WP7 V1 developer tools installation. Mango developer tools will be shipping with full WP7 VB.Net support. With that, we’ll likely see am uptake in VB.Net WP7 adoption. I hope.

Statistic #4: Cloned Apps

The following issue is a bit more complex to understand. There are a group of apps in the marketplace that are essentially the same app published multiple times with slightly different behaviour or data. In essence each XAP contains DLLs and if 2 XAPs have the same DLLs then they will be functionally quite similar.

By comparing the contents of all Windows Phone 7 XAPs with each other we can determine which apps are “cloned” with some limited certainty.

The WP7 Marketplace has 925 clones apps repeating themselves all in total 6,881 times. Roughly 20%+ of the WP7 marketplace is the same app published many times. For example the top cloned WP7 app repeats itself 570 times, the 2nd top cloned WP7 app repeats itself 553 times and the 3rd top cloned WP7 app repeats itself 408 times.

By counting each cloned WP7 apps just once, we can reveal that there are only 18,549 unique apps in the WP7 marketplace.

Side-note: Why clone apps?

Let’s avoid a witch-hunt right here and now. There are perfectly legitimate reasons to clone apps.

Books / Magazines: All mobiles marketplaces currently do not perform a content catalogue based search for apps. When searching a mobile marketplace for “Ulysess” unless that exact pharse is in the title or description of an App you won’t find the masterpiece written by Lord Alfred Tennyson. App vendors are thus forced to create multiple apps with the same execution paths and slightly different name and data.

DIY apps: Many organizations want a simple no-frills WP7 RSS based app. By using the same codebase and slightly different RSS points we’re effectively lowering the barrier of entrance into a mobile marketplace.

Lite vs. Full vs. Trial vs. Free apps: The WP7 marketplace does a bad job highlighting Trial apps. Bill Reiss eloquently penned that case a few months ago. WP7 App developers are forced to ship multiple versions of the same app for better searchability in the WP7 Marketplace.

Many other valid reasons exist to why apps are cloned.

For a good example I point to the “Traffic Cameras” apps that does make sense to highlight their unique localization. The core issue is the lack of support in Mobile Marketplaces for the concept of app “flavours”.

Side Note: “But Justin, What about iPhone? It’s magical!”

Note how the “Books” category takes up 14% of the iOS marketplace. That’s approximately 60,000 apps. Anyone thinking there are 60,000 kindle/ibooks competitors on iOS is on crack. These are all cloned apps.

Statistic #5: Publisher contribution to the overall marketplace

When looking at the entire Windows Phone 7 app landscape we get the rare opportunity to ask: Who contributes more? Single app developers or companies publishing 50+ apps?

Well, the answer is surprising in terms of quantity The Micro-publishers and Small Publishers each publishing less than 10 apps account for 60%+ of the WP7 Marketplace size. The larger publishers only contribute 1/3 of the total size of the WP7 marketplace.

But in terms of quantity what is the relative contribution of each of publishers to the top 2000 apps? (hopefully measuring app quality)

Exactly 75% of the top 2,000 “popular” WP7 apps are created by publishers shipping 10 or less apps. Proving once again that focusing in on a few defined objectives leads to better overall quality.

Both the smaller publishers and the larger publishers are important parts of the WP7 developer ecosystem. Without the smaller publishers we wouldn’t have as many quality titles; and without the larger publishers we would lack the reach to appeal to all consumers.

Statistic #6: Top 55 Windows Phone 3rd party libraries

Another interesting developer question that could only be answered from inspecting XAPs is: Who Da Man?

Many of us work to create 3rd Party frameworks in the WP7 ecosystem to be used by other developers. Some work for commercial companies, and others do so just for passion and joy. By inspecting the content of all WP7 marketplace XAPs we can know how many times each assembly is used.

Windows Phone 7 Top optional assemblies, in descending usage order

If you’re unfamiliar with any of these frameworks, stop being ignorant and click the link.

Microsoft’s WP7 Controls SDK: Ships with the WP7 developers tools and must be consumed by all apps using Panoramas and/or Pivots. Microsoft.Phone.Controls.dll is used 14,848 apps.

Microsoft’s WP7Silverlight Toolkit: Ships with a bunch of useful controls. Microsoft.Phone.Controls.Toolkit.dll is used by 11,169 apps.

Microsoft’s Expression Blend Behaviours and Triggers: Great for integrating visual designers and creative developers into WP7 user experience design. System.Windows.Interactivity.dllis used by 6,010 apps. Microsoft.Expression.Interactions.dllis used by 4,150 apps.

Microsoft’s Advertising SDK for WP7: Microsoft’s own Advertising infrastructure for WP7 PubCenter. Microsoft.Advertising.Mobile.UI.dll is used by 5,760 apps. Microsoft.Advertising.Mobile.dll is used by 869 apps. Microsoft.Advertising.Mobile.Xna.dllis used by 707 apps.

Laurent Bugnion’s MVVM Light: “The MVVM Light Toolkit is a set of components helping people to get started in the Model - View - ViewModel pattern in Silverlight and WPF”. My personal MVVM Toolkit of preference. GalaSoft.MvvmLight.WP7.dllis used by 1,320 apps. GalaSoft.MvvmLight.Extras.WP7.dll is used by 1,243 apps.

James Newton-King’s JSON.net: The premiere JSON framework used by WP7 developers. It’s awesome. Stop using the built-in stuff. Newtonsoft.Json.WindowsPhone.dllis used by 1,082 apps. Newtonsoft.Json.Silverlight.dllis used by 584 apps.

Microsoft’s Clint Rutkas's Coding4Fun Tools: Awesome controls built by the good people at Coding4Fun. Coding4Fun.Phone.Controls.dll is used by 800 apps. Coding4Fun.Phone.Controls.Toolkit.dll is used by 305 apps. Coding4Fun.Phone.Site.Controls.dll is used by 164 apps.

David Anson’s Phone Performance Helpers: Shipping with DeferredLoadListBox and LowProfileImageLoader David’s code has been invaluable in many apps creating scrollable lists with Images. PhonePerformance.dllis used by 705 apps.

Telerik’s WP7 SDK: “RadControls for Windows Phone are designed to speed up the development of Windows Phone apps and provide an array of controls and capabilities that are not available in the UI Toolbox for Windows Phone 7 and not even in the OS.” Telerik.Windows.Core.dllis used by 557 apps. Telerik.Windows.Controls.Primitives.dll is used by 555 apps. Telerik.Windows.Controls.Input.dll is used by 367 apps. Telerik.Windows.Data.dll is used by 194 apps. Telerik.Windows.Controls.DataVisualization.dll is used by 124 apps. Telerik.Windows.Controls.Chart.dll is used by 27 apps.

Sebastian Stehle’s ImageTools: “ImageTools for Silverlight is a library, which provides additional functionality for loading, saving and manipulation images from different sources and with different formats.” ImageTools.dllis used by 490 apps. PhoneCodeContractsAssemblies.dllis used by 480 apps. (used by ImageTools and exclusively consumed by ImageTools.) ImageTools.IO.Png.dll is used by 457 apps. ImageTools.IO.Gif.dll is used by 454 apps. ImageTools.Utils.dll is used by 454 apps. ImageTools.IO.Bmp.dllis used by 208 apps. ImageTools.IO.Jpeg.dll is used by 193 apps. ImageTools.Controls.dllis used by 122 apps. ImageTools.Filtering.dll is used by 42 apps.

Microsoft’s Silverlight Desktop Controls SDK: The Silverlight Desktop Toolkit and Silverlight Desktop SDK . System.Windows.Controls.dll is used by 484 apps. System.Windows.Controls.Layout.Toolkit.dll is used by 191 apps.

SharpDevelop’s #ziplib: “Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform.” ICSharpCode.SharpZLib.Phone.dllis used by 432 apps. ICSharpCode.SharpZipLib.WindowsPhone.dllis used by 406 apps. ICSharpCode.SharpZipLib.Silverlight.dllis used by 14 apps.

Microsoft’s Expression Blend PathListBox: “Contains a list of items that are laid out along one or more paths.” Microsoft.Expression.Controls.Fxg.dllis used by 395 apps.

Microsoft’s MEF on WP7:Damon Payne recompiled Microsoft’s Composition framework to WP7. System.ComponentModel.Composition.dll is used by398 apps. System.ComponentModel.Composition.Initialization.dll is used by 393 apps.

Microsoft’s Michael Scherotter’s Silverlight Analytics Framework: “Extensible Web Analytics Framework for Microsoft Silverlight, WPF, and Windows Phone 7 Applications.” Microsoft.WebAnalytics.dllis used by 373 apps. Google.WebAnalytics.dllis used by 363 apps. (Google Analytics support) Microsoft.WebAnalytics.Behaviors.dll is used by 231 apps. Microsoft.WebAnalytics.Navigation.dll is used by 35 apps. Microsoft.WebAnalytics.Controls.dll is used by 12 apps.

Matt Lacey’s Tombstone Helper: Super simple UI Tombstoning support. “Adds extension methods to PhoneApplicationPage so you don't have to worry about maintaining the state of a page in your app if it gets tombstoned.” TombstoneHelper.dllis used by 307 apps.

Jeremy Likness’sSterling OODB: Top Local Storage DB for WP7. “Sterling is a lightweight NoSQL object-oriented database for .Net 4.0, Silverlight 4 and 5, and Windows Phone 7 that works with your existing class structures.” Wintellect.Sterling.WindowsPhone.dll is used by 294 apps. Wintellect.Sterling.WindowsPhone.IsolatedStorage.dll is used by 40 apps.

Microsoft Research’s Code Contracts [PDF]: “Contracts allow you to express preconditions, postconditions and object invariants in your code for runtimechecking, static analysis, and documentation.” Microsoft.Contracts.dll is used by 292 apps.

Microsoft’s XML Serialization: "Contains classes that are used to serialize objects into XML format documents or streams.” System.Xml.Serialization.dll is used by 218 apps.

Alan Mendelevich’s AdDuplex SDK: “So, you have a great Windows Phone app or game and you are ready to make a million selling it or showing ads in it. That's great. The key to success is getting people to see your great app. That's where AdDuplex comes in. Promote your app for free by helping fellow developers promote theirs.” AdDuplex.AdControl.Silverlight.dll is used by 216 apps. AdDuplex.Xna.dllis used by 50 apps.

Noah Hart’s C#-SQLite: “C#-SQLite is an independent reimplementation of the SQLite software library. SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.” Community.CsharpSqlite.WP.dllis used by 206 apps. Community.CsharpSqlite.SqlLiteClient.WP7.dll is used by 38 apps.

José Ángel’s Widget Library for WP7: “Create Windows Phone 7 apps using HTML, CSS and Javascript over the WebBroweser control inside the phone.” WidgetLibrary.dll is used by 200 apps.

Microsoft’s Media Platform Player Framework for WP7: Great drag & drop fully featured video player for WP7 that supports EVERYTHING (Smooth Streaming, subtitles, audio tracks, 3D and just about anything video related). Microsoft.SilverlightMediaFramework.Compatibility.Phone.dll is used by 189 apps. Microsoft.SilverlightMediaFramework.Core.Phone.dll is used by 189 apps. Microsoft.SilverlightMediaFramework.Plugins.Phone.dll is used by 189 apps. Microsoft.SilverlightMediaFramework.Plugins.Progressive.Phone.dll is used by 189 apps. Microsoft.SilverlightMediaFramework.Utilities.Phone.dll is used by 189 apps. Microsoft.SilverlightMediaFramework.Plugins.SmoothStreaming.Phone.dll is used by 180 apps. Microsoft.SilverlightMediaFramework.Plugins.TimedText.Phone.dll is used by 170 apps.

Daniel Crenna’s TweetSharp: “TweetSharp is a Twitter API library that greatly simplifies the task of adding Twitter to your desktop, web, and mobile applications.” TweetSharp.WindowsPhone.dll is used 175 apps.

Microsoft’s WCF Data Services: “… enables the creation and consumption of OData services for the web (formerly known as ADO.NET Data Services).” System.Data.Services.Client.dll is used by 170 apps.

John Sheehan’s RestSharp: “Simple REST and HTTP API client for .net. RestSharp works best as the foundation for a proxy class for your API.” RestSharp.WindowsPhone.dll is used by 154 apps.

René Schulte’s WriteableBitmapEx: “The WriteableBitmapEx library is a collection of extension methods for Silverlight's WriteableBitmap. GDI+ like drawing functionality for the WriteableBitmap. Support for desktop and Windows Phone Silverlight.” WriteableBitmapExWinPhone.dll is used by 141 apps. WriteableBitmapEx.dll is used by 65 apps.

Microsoft’s Rx (Reactive eXtensions) DevLabs release: Essentially Linq to events state-machine. It’s important to note that only the DevLabs release is ranked here, not the embedded release. System.Reactive.dll DevLabs release is used by 135 apps.

Sergey Barskiy’s Windows Phone 7 Database: “This project implements a Isolated Storage (IsolatedStorage) based database for Windows Phone 7. The database consists of table object, each one supporting any number of columns. Use this as persistence engine for Windows Phone 7 Silverlight (and XNA) applications.” SilverlightPhoneDatabase.dll is used by 118 apps.

Rob Eisenberg’s Calburn.Micro: “A small, yet powerful framework designed for WPF, Silverlight and WP7. It implements a variety of UI patterns for solving real-world problems. Patterns that are highlighted include MVVM (Presentation Model), MVP and MVC.” Caliburn.Micro.dll is used by 111 apps.

Microsoft’s Windows Phone Shake Gestures Library: “The Shake Gesture Library enables developers to register for ‘shake gesture’ events in their applications. You can configure how strong you want your end user to shake, for how long, and in which direction to generate shake events.” ShakeGestures.dll is used by 111 apps.

Rgelb’s adMob for Windows Phone 7: “This project aims to provide Windows Phone 7 developers an opportunity to monetize their free applications using AdMob.” adMob7.dll is used by 97 apps.

Karl Seguin’s Mogade Windows Phone : “Mogade is a free service web-based service which allows game developers to quickly enchance their games with auxiliary functionality (such as leaderboards).” Mogade.WindowsPhone.Core.dll is used by 88 apps. Mogade.WindowsPhone.dll is used by 86 apps.

Jeff Brand’s SlickThought WP7 Trial Manager: “TrialManager is a simple piece of code that you can add to any WP7 project to help manage the behavior of your trial apps. TrialManager will also make it easier to simulate you application running in Trial mode when creating your apps.” SlickThought.Phone.dll is used by 86 apps.

amChartsQuick Charts for Windows Phone 7: “Quick Charts is an easy to use, fast set of charting controls for WPF, Silverlight and Windows Phone 7. And it's FREE and Open Source (Ms-PL)!” AmCharts.Windows.QuickCharts.WP.dll is used by 85 apps.

Shawn Wildermuth’s PhoneyTools: “This is a project that contains several classes and controls for use with Windows Phone 7 applications.” AgiliTrain.PhoneyTools.dll is used by 59 apps.

Romeo Dumitrescu’s Windows Phone 7 Isolated Storage Explorer:“WP7 Isolated Storage Explorer is a tool designed to help developers and testers interact with the isolated storage file for Silverlight Windows Phone 7 applications. The explorer can work both as a desktop application for testers or integrated in Visual Studio for developers.” IsolatedStorageExplorer.dll is used by 57 apps.

Jeff Weber and Ian Qvist’s Farseer Physics Engine: “Farseer Physics Engine is a collision detection system with realistic physics responses. This means you can create a game or robotic simulation easily using the engine and the associated tools. Everything from simple hobby games to complex simulation systems is possible with Farseer Physics Engine.” FarseerPhysicsXNA.dll is used by 54 apps. FarseerPhysics.dll is used by 29 apps. FarseerPhysicsWP7.dll is used by 12 apps. FarseerPhysicsPhone.dll is used by 4 apps.

MobFox Windows Phone 7 SDK: “MobFox is world's highest-paying mobile advertising network for US & EU Traffic on iPhone, Android, Windows Phone 7 applications and mobile websites. Instead of working with hundreds of different advertisers and networks, we concentrate on placing the most engaging and most paying premium ads on your applications or mobile websites.” MobFox.Ads.dll is used by 47 apps.

Damian Karzon’s DropNet: “.NET Client library for the Dropbox API.” DropNet.WindowsPhone.dll is used by 44 apps.

Pawel Idzikowski’s sharpSerializer: “sharpSerializer is an open source XML and binary serializer for .NET Framework, .NET Compact Framework and Silverlight.” Polenter.SharpSerializer.Silverlight.dll is used by 40 apps.

Update 10/3/2010: With the new numbers regarding the use of Dotfuscator it appears 14.5% of the marketplace is PreEmpetive’s solutions for obfuscation and 2.6% of the marketplace for instrumentation. Earning Dotfuscator a rightful place as top framework #4.

Who Da Man?

Can I see report breakdowns and the technique used to generate them?

Yes. I’ve posted the reports generated for the entire marketplace, the same reports for top 2,000 WP7 apps and the source code used to generate reports. If you’ve got a 3rd party framework you can see specific usage numbers in these detailed reports.

Can you share raw data or how to download the entire marketplace?

No. There are security, legal and piracy implications to sharing data of that granularity.

However, an independent report isn’t meaningful unless it’s potentially corroborated by others. So, If I’m personally acquainted with you (let’s say you’re a Silverlight MVP or someone like that) feel free to ping me and I’ll share all code needed to download the WP7 marketplace and run these reports. If any such endeavour is ever undertaken up by anyone, I’ll update this blog post.

Can I get a custom statistic?

Yes. Sound off in the comments! I can always generate more informative statistics based on your requests. Don’t be shy, if you have questions I’d love to help out.

Any feedback?

Thoughts? Feedback? Feel free to sound off in the comments! I’d love to hear from you folks.