Thursday, February 21. 2008It's About the Product, SillyToday there was a recent flurry of blog posts, starting with Charles Babcock's interview of Jonathan Schwartz about Sun's strategy of targeting Web 2.0 developers. This brought to light an interesting topic about open source development communities, the perceived insularity of Sun towards the external OpenSolaris developer community, and why Linux will apparently always be more popular and technically stronger than OpenSolaris. The initial interview led Amanda McPherson of the Linux Foundation to take issue, and long comments on those posts from supporters and objectors, shed light on a rift between OpenSolaris insiders, Linux community developers, and Sun's overall marketing approach around open source. Amid various snits about Sun's "fluffy marketing" practices[1] towards OpenSolaris, there was a defection of a high-level OpenSolaris developer, Roy Fielding. The defection ostensibly was due to Roy's frustration that Sun was not living up to its promises of a truly open development model and community, a frustration that Steven O'Grady finds uninspiring. Unfortunately, these conversations are really just a sideshow of personal and anti-corporate rhetoric that miss the underlying truth about open source (and indeed closed source) products/projects: it's not about the marketing, it's about the product, silly. I'm sure my colleagues of the marketing persuasion may take issue with that statement, so let me elaborate why I believe this to be true, and why I think that OpenSolaris has a chance of becoming a true competitor to Linux in the future — and that chance has absolutely nothing to do with Sun's OpenSolaris marketing team (sorry, folks.). It's All About the Product (Quality)As much as developer communities[2] like to think of themselves as the purveyors of a grand vision of truth towards the user community, all developer communities are dwarfed by their corresponding user communities. Members of a user community are unlikely to be aware of discussions within the developer community nor care about the debates within that community. User communities use the product. It is the product which counts, and nothing more. And the user community will continue to use a product as long as other competing products are inferior in three basic ways:
Before you say "whoah, doesn't licensing count, too?!". Sure, it does, but I group licensing in with "Ease of Use". For some groups, a BSD-style license is "easier to use" because of a perceived viral effect of the GPL on their own code (especially for embedded products). For other groups, the GPL-style licenses are easier to use because they provide certain safeguards and benefits for their own products or environments. So, my point is that it is not the marketing of a product that counts — indeed, false marketing statements or tactics can backfire quickly. What counts is the product itself. Marketing should be the function of promoting the innovative advantages of a product in the above three categories. Likewise, developer communities should be about improving a product in these three ways. And, NO, "features" is not a differentiation that the user community (or customers) use in picking one competing product over another. Features that deliver better ease of use, faster performance, or more stability are what can drive differentiation. Features that do none of the above are a waste of space. Why Open Development Models Improve Product QualityAn open development model and community is simply a method of attaining better product quality. Sure, happy developer communities translate to happy user communities — happy developers make better code and better code is enjoyed by users. But simply having a "community", as the OpenSolaris marketing team would have you believe, does not magically make a good product. A community can take many shapes. It is my belief that a more open development community does make a better product. Why? Increased Modularization of the Core ProductIn my estimation, there are many reasons for open communities producing better products than closed communities. First and foremost amongst these reasons is the first evolutionary process which occurs when development of a product is opened up in any way: increased modularization and pluggability of the core product. The vast majority of open source projects which have a truly open development community exhibit much higher architectural modularization than projects with closed development communities. Apache, Eclipse, Linux, PHP — these are all projects with open development communities and they each exhibit extremely high levels of modularity. Why? Because modularization enables development to continue/begin on a specific feature or part of the codebase without affecting or hindering the development of the core of the product. This enables all sorts of things from easier versioning and release practices to an increase in external development of needed features. Contrast the architecture of these projects with the architecture of a closed development project such as MySQL. The architectural differences are sometimes stunning, especially in early versions of MySQL. When I wrote the System Internals chapter in Pro MySQL in 2005, I wrote: MySQL’s architecture consists of a web of interrelated function sets, which work together to fulfill the various needs of the database server. A number of authors have implied that these function sets are indeed components, or entirely encapsulated packages; however, there is little evidence in the source code that this is the case. I wrote that chapter against the MySQL 5.0.2 code base. Admittedly, lots of improvements have made it into MySQL since those days, but much of the same interweaving of subsystems still exists, and complicates the code base substantially. I believe that if an open development model had been instituted at MySQL years ago, we would have a very different and much more modular core database kernel than we have today. Heck, the embedded library might even work correctly... Modularization Leads Directly To InnovationSo, besides enabling cleaner release management and increased development of external features, why is a modular product better than one that isn't? This all goes back to the "Big Three Basics": Ease of use, performance, and stability. Let's tackle the last one first. Increased StabilityWhy would modularity lead to an increase in stability? This can be answered quite easily. When a product's architecture undergoes the refactoring needed to modularize, two things happen. First, a "core kernel" or runtime begins to take shape. This kernel takes shape because developers in an open development community want to be able to develop against a firm set of application programming interfaces (APIs). Programming against an API enables a developer of an extending feature to form a contract with other developers in the community: "I will write my feature to connect to other stuff in a predefined and contractual way". Secondly, this method &mdash programming against an API — allows the developer to develop her feature in isolation from ongoing development in other areas. Development in other areas can count on other developers' code not interfering with their own code. In addition, work done on one feature or module can be released irrespective of the hangups or problems occurring in other parts of the code. So why does this lead to greater product stability and reliability? Because of the need for APIs (so that other developers can code modules outside of the interference of other modules) a set of APIs begins to emerge that outline the "black box" of the core product. This standardization process of creating APIs for connecting to the core kernel acts as a stabilizing force for the product in general. The stability of the APIs, and their consistency in implementation, can be directly correlated to the stability of the underlying product as a whole. The reason for the correlation is that when changes to an API are more difficult to effect &mdash because of their corresponding effects on other code — stability increases due to fewer changes in the way that components interact with each other. Case in point: the "pluggable" storage engine API in MySQL was introduced in early MySQL 5.0 versions. This API has changed numerous times over the past two years as different vendors (internal and external to MySQL) needed or wanted additional functionality. The API has started to stabilize now, but I see additional changes in the future. What has happened to the stability of the underlying code base of MySQL? I will leave that answer to the reader's intuition. Increased PerformanceThe reason I believe modularization leads to better performing software is because the act of modularizing identifies pieces of the software which can and should be "pulled from the core". Pieces not central to the functioning of the core kernel are pulled out of the core product and placed, rightfully, into modules which provide additional, value-added-for-a-certain-group-which-needs-it features. By placing extra features outside of the realm of the "necessary", the core kernel begins to take the shape of a lithe marathon runner and not the bloated monolith it once was. You may wonder why this removal of extra features can lead to better performance of the product as a whole. By removing non-essential parts of the software into modules, the code for the core part of the software is simplified and shortened. Now, simple, shorter code isn't necessarily faster just for being shorter (though often it can be). However, the ease of maintenance on a simplified core software kernel allows developers to focus on performance-related tasks involving that simplified kernel. Improving performance of essential runtime functionality is much easier and faster when the code isn't littered with calls and code paths that correspond to the functionality that belongs in an external module. If performance issues in the core kernel are easier and faster to fix, then the product as a whole becomes better performing. Secondly, the modularization of a code base means that users who do not need an array of features can use a smaller, streamlined product that only fits their needs. Often, when users can make use of a streamlined project that doesn't contain code they don't need or want, the resulting binary is smaller and faster. Increased Ease of UseHow modularization increases ease of use is related to how it increases performance: by enabling developers to only focus on the module at hand, or the core itself, instead of a mix of both, the developer is freed to focus on fixing ease of use bugs and addressing usability issues. The more time a developer can spend actually doing the things that comprise her outstanding bug and feature list, and not on "how will my code affect ten other developer's code", the better the chances of a product's usability becoming better. Finally, Increased Competition Fosters InnovationI think it's fairly obvious that increases in stability, performance and ease of use translate into increases in innovation for the product as a whole. My final thought on why modularization leads to increased innovation is that modularizing a product leads to competition in the developer marketplace for a specific feature. This competition spurs the developers of a competing module to do it better and faster. Case in point: the pluggable storage engine API "modularization" effort at MySQL spurred the creation of numerous competitive engines — from Paul McCullagh's PBXT engine to SolidDB's transactional engine to the new Falcon and Maria engines. Each engine demonstrates different characteristics, benefits and disadvantages. Without each other, the wellspring of innovation would be much drier. Innovation Leads to Market ShareSo, assuming you've come with me in my theory that open development communities foster modularization of a product, and that this modularization leads to more innovation for the product as a whole, then I think you will be able to make this final step easily: innovation in a product leads to greater market share. It doesn't matter whether the product is the result of a group of loosely-affiliated individuals or a company like Sun or MySQL, each producer of a product wants their product to have the most market share compared to competing products. It's human nature; we just want to be popular! Jonathan Schwartz is Right About Community, But Wrong About Why He's RightSo, in Babcock's interview, Jonathan Schwartz says, Everything begins with the development of a community Jonathan is right about everything beginning with the development of a community. However, I believe Jonathan, and a number of folks I've met personally at Sun, feel that simply having a community automatically makes a good and popular product. This simply isn't true. It's about the product, first. Then the community. A vibrant community (both developer and user) springs from the fountain of enthusiasm about a product. If that enthusiasm wanes, because of anything from the closing of the development model to the inability to get their voices heard regarding a product roadmap or architecture, then the community begins to die along with the product. It is a delicate thing, this product and community balance sheet. This well is poisoned; the company has consumed its own future and any pretense that the projects will ever govern themselves (as opposed to being governed by whatever pointy-haired boss is hiding behind the scenes) is now a joke. Sun should move on, dissolve the charter that it currently ignores, and adopt the governing style of MySQL. That company doesn't pretend to let their community participate in decisions, and yet they still manage to satisfy most of their users. Let everyone else go back to writing code/documentation for hire. The above is a quote from Roy Fielding's email to the OpenSolaris developer's mailing list in which, at the end, he resigns from the OpenSolaris community. I think it is telling about how delicate the balance between product and community really is. He points out that it was the broken promises about a truly open development model that was the deciding factor in his resignation. I suspect that frustration at not having a voice in the architectural decisions surrounding OpenSolaris were also a big factor, too. Pointedly, he states that MySQL has never pretended to let our community participate in decisions, but MySQL still enjoys a large and vibrant user community. I theorize that the MySQL user community is in danger of becoming fragmented and is increasingly fragile because of the "we decide" nature of MySQL's closed development model. I believe that MySQL achieved ubiquity and a huge user community because of this:
In other words, it was about the product itself. If the product loses touch with its roots and because of a closed development model moves further away from easy to use, fast, and stable, the user community and MySQL's ubiquitous nature, will move away to competitors. Again, an open development community is a method to achieve greater innovation in a product. I believe it is silly for either MySQL or Sun to make any steps that do not open up its development activity to the wider community. If openness spurs innovation of the product, closing off of development only means that the company is stifling innovation and decreasing its own market share. If a method is there to increase innovation, why disregard it? Why OpenSolaris Could Be a Real Competitor to LinuxIt's about Innovation in the Performance, Stability and Ease of Use of a product. As Ian Murdock wrote on the OpenSolaris blog: My basic observation, as someone who came into the OpenSolaris community from the outside - even perhaps from the competition - and who represents the target market this community needs to reach was this: That the packaging and presentation of OpenSolaris as it stands today represents a barrier to adoption and, thus, an obstacle to growing the OpenSolaris community and bringing in new users. To lower these barriers, OpenSolaris needs to be more than just the code base. It needs to be a binary that users can easily download and install to get easy access to OpenSolaris technology. Put another way, as I said in a blog post in June, we need to have a better answer to the question, “Where do I download OpenSolaris?” Ian understands that a product gets adoption when innovations in ease of use, performance, and stability are demonstrated. In the above quote, he talks about the problems in ease of use that are barriers to adoption of OpenSolaris. Similarly, there are a number of performance-related and stability-related innovations that are contained within OpenSolaris. But the product will not achieve true competitive status with Linux until the development community is opened up and innovation from the external community — in the form of a voice and control over architectural issues and design — is truly embraced at Sun. If Sun embraces an open development model and embraces its developer community in discussions on roadmap and architectural decisions, I think OpenSolaris has an excellent chance of competing head-to-head with Linux on the innovation front. If the product is more innovative on a variety of levels, it will gain market share. What This Means for MySQLAs Brian Aker rightly points out, MySQL has never been an open development model. But steps have been taken to open it up. The resignation of Fielding suggests that it's not the lack of openness which frustrated him, but the promises of Sun to do so. This means that MySQL must be very careful not to over-promise on something it cannot or will not deliver regarding openness. In addition, if we are to reverse the current course of a community-in-flux, we must embrace the fear we have of opening up our development process. We must get out of the cathedral and put up shop in the bazaar. We won't be jumping out of the cathedral's top window; more likely we'll rappel down Rapunzel's hair slowly and carefully. I see very good prospects about opening up in the future and I am excited. It will be happening in the nick of time. Take everything I write with a grain of salt. After all, I'm just a lowly community relations manager. Footnotes[1] Amanda McPherson writes:We may not have fancy Linux analyst days and mountains of spin, but it is all about the development community. Literally. to which Mike Dolan responded in comments: Yes, yes, and yes. This Sun nonsense needs to be called out; it’s great to see someone else actually looking into the critical details behind Sun’s fluffy marketing. [2] I differentiate "developer community" as the developers which develop the product, as different from the "user community" which a) develops products on top of or for the product or b) simply use the product. Trackbacks
Trackback specific URI for this entry
No Trackbacks
Comments
Display comments as
(Linear | Threaded)
Exactly. Or more pointedly, why don't you already?
Not only lends a modular architecture itself to be extended by others, but it also improves the chances that it can be tested more easily...
Moreover, in which markets could MySQL be used if it was more pluggable? I've met a guy who wanted to do MDX on top of MySQL but couldn't get a foot in the door without committing tremendous resources to the task. I guess he never went forward with that project, which is a shame. There are of course issues with completely open development models, the greatest is (IMHO) conceptual integrity. You can see much of the problem in the Linux world, where practically every distribution is different, every program works in a subtly different way, and confusion ensues. That's generally why I stay as far away from it as I can. Of course, a more closed development model is in no way a guarantee for conceptual integrity, but it's easier to achieve that way. And in the end, it always helps the user and thus builds a community. Ask a Mac user about OpenOffice on the Mac...it simply violates (in the X11 variant) everything a user of that platform came to expect. It is similar with smaller scales - the perceived quality of a product is hugely influenced by its ease of use, where that means different things to different users (in terms of a DB): - for beginners it could mean ease of deployment and setup - for intermediates it could mean greater flexibility in tuning and more advanced features - for the high end users it could mean to be able to replace entire parts of the products while still being able to enjoy "a working rest" Go try and replace the parser (like the MDX guy mentioned wanted to do) in MySQL. Good luck. IMHO it is vitally important, maybe more so than anything else, to bring MySQL to a point where it's easy to replace parts of it for special purposes, such as embedded devices, high volume traffic, huge throughput in data or something else entirely. The fact that MySQL has different storage engines is a direct acknowledgment of the fact that one size not necessarily fits all. If it is done in a closed or completely open development model doesn't make much of a difference for the user per se, I think. I totally agree that it is the product itself that makes the difference. If the users are passionate about the product it will spur the developers to new heights, because there's nothing a developer likes more than someone who says "I love what you did". And yeah, why doesn't Mark have commit access? "There are of course issues with completely open development models, the greatest is (IMHO) conceptual integrity.
You can see much of the problem in the Linux world" True, but remember that "Linux" really is the Linux kernel, not the OS distributions built on top of it...the kernel itself is much less conceptually fragmented than the OS (which have either open or closed development models) built on top of it... "The fact that MySQL has different storage engines is a direct acknowledgment of the fact that one size not necessarily fits all." I disagree. The pluggable storage engine "API" was borne from MySQL marketing in response to Oracle's agression in buying InnoDB. The true code API followed afterwards. I posit that if MySQL had an open development model, the pluggable storage engine API would have been a reality ever before "InnoDB Friday" and who knows what would have happened on that day... "If it is done in a closed or completely open development model doesn't make much of a difference for the user per se, I think." I agree that modularization can certainly happen in closed environments. But, the impetus for modularization I feel is higher in open development communities because the voices crying for the benefits of modularization are louder -- because there are many more benefits for the open development community folks in having a pluggable, modular architecture. They can develop for the product more quickly and reliably with a modular architecture than a monolithic one. In a closed development model, those voices aren't nearly heard at the same level. Instead, the voice of the highest-paying customers tend to dictate the roadmap, and those voices are more focused on one specific feature that eases their pain points. And the closed development shop addresses those pain points with less vision to the benefits of making such a change in a modular fashion. Sure, over time the closed development shop adopts the lessons of open development communities, but it takes longer, IMHO. Cheers, mate! -jay "True, but remember that "Linux" really is the Linux kernel, not the OS distributions built on top of it...the kernel itself is much less conceptually fragmented than the OS (which have either open or closed development models) built on top of it... "
The example also works with the Linux kernel: It's a very small group that ensures conceptual integrity. Thus its perceived quality is higher than, say, window managers for X11 or rc.d scripts. The Linux kernel works the same across distros (well, minus the patches they apply ... ) but various package management systems don't. "I disagree. The pluggable storage engine "API" was borne from MySQL marketing in response to Oracle's agression in buying InnoDB. The true code API followed afterwards." I was not so much referring to the published API but rather to the fact that you could implement different storage engines that were better suited for different tasks. There was an internal API before "InnoDB friday". Sure it maybe was awkward and not a "bullet point" on marketing lists, but it was there. I meant the concept of it. "I posit that if MySQL had an open development model, the pluggable storage engine API would have been a reality ever before "InnoDB Friday" and who knows what would have happened on that day..." I concur. But I'm convinced that it wouldn't have been possible to build such a business around MySQL if it was a truly open effort. MySQL AB would not have had the IP to it all and thus couldn't have dual-licenced it and thus could not have been such a success business-wise. Linux (the kernel) is not a business, and that's not only because it's GPL...for the record, I don't want to judge licensing issues here. "In a closed development model, those voices aren't nearly heard at the same level." Sure, that's why you want to have a thriving dev community to make the need loud and clear. And it's also the reason why I think it so important to move to a truly pluggable architecture ASAP. I consider it a strong point of any product if I can extend it in any way I see fit. I'm willing to pay for a chassis to make that possible and being modular doesn't mean a product can't provide a pleasant "out-of-the-box" experience. However, taking everything into consideration, I think for a product like MySQL (with MySQL AB attached) it makes more sense to have a more closed open source development model (what an expression Of course, when it takes too long to incorporate changes from the outside, the product suffers. And with it the community. I think we are all painfully aware of such occurences... Much agreed on most of your points, Kay. The only real digression from your points is that I believe MySQL can get greater innovation by opening up its development model, and that innovation will lead to greater market share and thus better business for MySQL (and its ecosystem developers as well...)
The pain is there in the community already. Hopefully, we'll see a number of changes that reduce the barrier to entry for a community developer in the coming months. I know at least a few things that will significantly help are going to happen sooner rather than later... That was probably one of the most incisive posts that I've read in a while. The only issue that I have with it is that you don't talk about how to keep the core development team fresh - Xfree86 is probably the most obvious example of a project where the core itself rotted despite the larger community.
Stuart, that's a great point, and something I should probably devote another article to!
|
Calendar
QuicksearchArchivesCategoriesSyndicate This Blog |
||||||||||||||||||||||||||||||||||||||||||
