ailon's DevBlog: Development related stuff in my life

GPL/Commercial Dual Licensing Is Evil For Libraries

12/27/2011 6:12:00 PM

I’ve listened to Hanselminutes on Kendo UI a couple of days ago. It was a great podcast as usual and, even though I haven’t personally used it yet, I’ve heard good things about the Kendo UI framework. What I haven’t noticed before and what I’ve heard on the show was that Kendo UI is released under a dual GPL/Commercial license.

I used to run a dual-licensed GPL/commercial product from 2003 and decided to never go that road again. The decision isn’t new, but I figured I’ve never put the reasoning in writing. So here it is. Here’s why I think GPL/commercial dual licensing is bad for your libraries (from the developers/publishers perspective).

Disclaimer: IANAL (I am not a lawyer). So all of this is just my point of view on the issue.

Why GPL/Commercial in the first place?

This was our rationale for SPAW Editor and, from what I’ve heard on the podcast, Telerik’s rationale was pretty much the same. We didn’t mind (and even wanted) open source projects using our library for free. That sounded great both from “good karma” perspective and free word of mouth promotion it was supposed to generate. On the other hand, we didn’t create the library out of pure love for coding and expected to support it by selling it to commercial customers. GPL looked like an easy solution for our needs. It allowed us to release the code to be used by open source projects and prohibited its use in the closed source projects. Or at least that’s what we thought at that time.

Unfortunately even though it is partially true, partially is a key word here and it has quite a few caveats.

Problems with GPL/Commercial licensing

  • GPLed version can only be used in GPL-compatible projects.
    GPL is contagious. Once you use a GPL library in your project, you can only distribute it under GPL. So we weren’t serving non-GPL OSS projects and there are lots of them.
  • Your product is not really Open Source.
    As long as you are the only contributing party you can re-license your code in any way you like. Once there are other contributors to your GPL project, their contributions are covered by GPL and you technically loose rights to dual-license it. Obviously you can work around this with some legal work, but that’s an extra barrier to entry by contributors. So I’m pretty sure that, even though Todd Anglin stated on the podcast that they are looking into enabling contributions, this will never materialize.
  • GPL is confusing. Especially in our (library/framework) cases.
    GPL FAQ is 35 printed pages long. When you are building your business on top of GPL you can manage to read and understand it. When you just want to use a library (which has competitors with simpler licenses) – you wouldn’t bother.
  • It creates a lot of “legal” support overhead.
    Following on the previous bullet point, the most frequent type of question we were getting was “I want to use your library in Scenario X. Can I use it for free?”. We used to have a question like that in our FAQ (it is not there now since we stopped offering commercial license), but it didn’t help. Every situation is slightly unique and your users don’t have enough time and/or willingness to figure it out on their own. So they delegate it to you.
  • You are not getting as much viral promotion as you would’ve with non-restrictive open source license like BSD, MIT or MsPL.
    Just because fewer OSS projects can use your product.
  • You are not monetizing who you wanted to monetize.
    GPL covers distribution. If there’s no distribution involved everyone can use your library for free “under GPL”. So if Microsoft or, say, Google build their own sites in-house they can use your product for free.

These are the issues I’ve experienced with the model that I can think of from the top of my head. I bet there are other things too.

Is there a better way?

Provided that our objective hasn’t changed and we want to support non-commercial and/or OSS initiatives with a free product and monetize commercial users, I’ve seen 2 approaches that work better, in my opinion, than GPL/commercial dual-licensing.

  1. Core product under (more) permissive license, commercial extras.
    This is the approach used by the most popular web WYSIWYG editor (and SPAW Editor’s competitor at the time) – TineMCE among other projects. I think it was one of the reasons (probably not THE reason, but still) why they “beat” us. The core library is released under LGPL or totally permissive licenses (BSD, etc.) and you make money on extras that are not required, but have a wide enough appeal to generate revenue.
  2. Linkware/Commercial dual-licensing.
    This is the approach we use with most of the amCharts products (and, no, I didn’t come up with the idea). This would probably only work for more elaborate UI libraries (like charts). The idea is that you give away your library for free to anyone with only caveat that it includes a link back to your site. Non-profit projects wouldn’t mind it in exchange for a great product, and commercial users probably would mind it and buy a license (or they wouldn’t mind and you still get advertising from them).

That is basically it. Let me know if I forgot something or if you think I’m totally wrong. You can do it either here in the comments or on twitter.

P.S.: feel free to follow me even if you don’t have anything to say on the subject ;)

Tags: ,

Notes from DevReach

10/24/2011 5:42:54 PM

Last week I’ve visited Sofia, Bulgaria. I was attending DevReach conference. I’ve decided to visit at least one international conference this fall and DevReach was pretty much the best possible choice judging by the caliber of speakers and sessions. And combining that with the total cost to attend, it was THE best possible value.

The Conference

The conference was held in the Arena Mladost multiplex and was very well organized. Aside from putting too much trust into Google Translate for the intro slide I have no complaints whatsoever ;)


FYI, you can hardly translate “Welcome” into “Pasveikinti” in Lithuanian in any normal situation. The real translation in this case would be “Sveiki atvykę”. But Kudos for the effort ;)

Other than that minor minor thingy, organization was pretty much flawless. Conference WiFi worked like a charm. Something you don’t expect from a developer conference. The fact that it was held in a cinema meant that sitting was top notch and by the end of the day my ass and back had no complaints.

Speakers were great. Obviously there were no big reveals or announcements, but the fact that there were tons of great speakers and most of them weren’t from Microsoft and weren’t doing a boring “read material prepared by MS evangelism team while showing slides someone else made”, more than compensated for the lack of big announcements.

I’ve already seen, heard or read most of what Scott Hanselman had to tell, but the experience could be compared to seeing your favorite band on video and then watching them live. You don’t complain that they’ve played your favorite songs.

A special checkmark goes to participating in the live recording of an episode of DotNetRocks podcast.


That was great, but considering the subject of “starting your own software company”, it was pretty strange not to see the founders of Telerik on the panel. I’ve expressed my surprise on Twitter and Richard Campbell admitted that this should be fixed and we can expect a DNR episode on the subject. Do I get a mug? ;)

As for Windows Phone, unfortunately Bulgaria is in the same situation as Lithuania – they can’t buy apps and they can’t submit apps directly. So interest in the subject is relatively low. I have no special arguments for Lithuania, but Bulgaria is a home of one of the biggest .NET vendors in the world, so, really MS, WTF!?

Another interesting observation – there are lots of female developers in Bulgaria.

Extracurricular Activities

I’ve arrived on Sunday (conference started on Monday). So I had a couple of hours for sightseeing. Sofia is a beautiful city, but unfortunately the weather was pretty crappy (I’ve travelled 2000km south and it was colder than back home and it was snowing!), so I couldn’t enjoy it properly. I guess I’ll have to return :)


And what’s up with the homeless dogs? Are they some kind of sacred animals or just friendly habitants of the city?


They can be seen in all parts of the city and it felt pretty strange, even though they looked sort of friendly. I like dogs, but I almost shat my pants when a huge black dog emerged from behind of a container right in front of me. Luckily the dog almost shat his pants too.

The location of the venue is relatively remote and there’s only one hotel next to it. So all the speakers and most of the international attendees stayed there. I had a great pleasure of meeting awesome people despite being a shy (read stupid) person: Scott Hanselman, Jesse Liberty, Stephen Forte, Joel Semeniuk, Gill Cleeren, Maarten Balliauw, Todd Anglin, Phil Japikse, Michael Crump, Tomislav Bronzin, Chris Eargle,  etc. (sorry, if I forgot to mention you personally!)

Pro tip: never try to save on the accommodation when traveling to a conference. Stay where speakers stay. It’s worth every penny.

After the second day of the conference there was a party for speakers and VIP attendees where I finally got a chance to meet great guys from Telerik: Vassil Terziev, Valio Stoychev (thanks for the ride!), Vladimir Milev and others. And it was great to reconnect with Emil Stoychev.


I liked it. I’ll be coming back next year. Hopefully as a speaker(?) ;) If you are looking for a great MS technology related conference in Europe which doesn’t force you to break your bank, look no further. DevReach is it.

P.S.: special thanks to Natalia Dimitrova for planning all of this and answering my stupid questions ;) And thanks to Ina Toncheva (sorry we had only a short chance to chat).

Tags: ,

Black Leather Shoes

10/22/2011 10:14:45 AM

Note: this is just some random blabbering from a geek who knows nothing about “fashion” but decided to write about it anyway.

I was packing for my trip to DevReach a week ago when I saw this tweet


and I remembered Scott Hanselman talking about dressing up a notch and getting more respect on This Developer’s Life. I am paraphrasing, but hopefully that was a key takeaway. One of the main aspects of dressing up Scott mentioned, was wearing nice black leather shoes and not sneakers.

So here I am preparing to go to the conference and staying in the same hotel Scott stays and this is what I’m going to wear


These are Adidas Superstar and, yes, that’s a Star Wars edition ;) And they even have some lightsaber action on the soles :D


Yeah, I know. I’m 36 and I find this to be cool. There must be something wrong with me.

And my other shoes are superstars too. That’s my way of dramatically narrowing down my shopping options while still leaving a little variety for fun (they come in different colors, materials, etc.). And I love them. When I get rich I know what I’m going to collect.

So, we are having breakfast with a number of speakers at DevReach and the discussion inevitably comes to shoes and everyone wears a different kind of shoes. Some wear “nice black leather shoes”, some wear running shoes, some wear “vintage” sneakers and some even wear sandals (even though it was close to freezing in Sofia). We discuss it for some time and everyone stays with their initial opinion and we move on.

This morning I was tying shoelaces on my superstars and I remembered this photo


This is a photo of Phil Haack from Scott Hanselman’s blog annotated by Scott himself (as far as I understand). Update: Scott didn’t make this picture. And look what shoes he is wearing. Yep, these are Adidas Superstar. And he was wearing superstars all the times I’ve seen him at 2 MIXes. I noticed, because like Scott is obsessed with “nice black leather shoes”, I’m obsessed with superstars. So I notice.

So, back to the topic of “dressing up” and getting more respect. Suppose I don’t know who Scott Hanselman and Phil Haack are. And I meet them both and one is wearing “nice black leather shoes” and the other one is wearing Adidas Superstar. And I’m wearing superstars too. So who is getting more respect credit from me?

In a pretty crappy Adjustment Bureau movie, there’s one good scene where Matt Damon’s character (running for congress) explains how his team picked his shoes. It goes something like they should be relatively new but not too expensive and shiny, so that working class doesn’t think you are some rich kid from Wall Street and at the same time they should be respectable enough, so rich kids from Wall Street don’t think you are some poor schmuck. And he gets respect of the crowd by telling the truth about this.

The bottom line is that you can probably try to tailor your wardrobe for “more respect”, but you would probably get more respect by being honest and true to yourself.


Slides from My Presentation on “Marketing and Monetization of Windows Phone Apps”

10/10/2011 3:43:06 PM

Presentation slides without a narrative always seem funny/strange to me, but many ask to see them, so here goes. Last week I gave a talk on Windows Phone app marketing and monetization at Microsoft Partner Conference in Lithuania and Latvia. Here are the slides:

I’d be honored to talk on this subject at your conference, user group or other event. Email me and lets talk!

Tags: ,

End-to-End Experiences Do Not Scale Globally

9/29/2011 4:46:39 PM


I’ve been watching a live blog from Amazon’s new device unveiling yesterday. Jeff Bezos was repeating his “end-to-end service” mantra. I love the end-to-end experience idea … in theory. In practice I’m never able to experience it. Apple and Amazon are the best known end-to-end service providers. They are huge. They have a lot of weight. But even they don’t have enough power over content owners and/or don’t offer attractive services to content providers worldwide.

I own 2 Kindles. I read in English mostly and Kindle provides me with end-to-end experience most of the time. I love it! Except Mark Russinovich’s Zero Day: A Novel wasn’t available in Kindle format internationally for half a year. So I didn’t get any experience at all. But, yeah. Who cares!?

My wife reads in Russian and there are virtually no Russian books on Amazon. But Kindle is an end-to-end service and support for “obscure” formats like ePub isn’t a part of the end-to-end experience. So to read non-Kindle books on a Kindle you have to convert them to MOBI (provided they are not DRMed). It’s pretty easy to do with Calibre but it degrades your experience to a level lower than with non-end-to-end open market readers directly supporting multiple formats.

Our daughter reads in Lithuanian and there are basically no non-DRMed Lithuanian ebooks. So Kindle is just a useless piece of “premium product at non-premium price” for that.

And situation with books is actually much better than what goes on in the music and video area. So even before the Kindle Fire announcement it was obvious that it’s going to be US-only (or US + some Western European countries at best).

End-to-end experiences sound good in US. They are glorified by user experience advocates. But when it comes to worldwide scene, clunky duct taped Android experience dominates. That’s why it’s so huge. There’s no need for Amazon, Apple or Microsoft to strike a distribution license for Moldavian books to be available in Moldova. There’s some local company that would do that, because that’s their main market*. It’s crap and pocket change for the US juggernauts, but it’s the whole market for that little company.

Great end-to-end experiences are only great while you stay on course. One step off that course and you have a subpar experience, if any at all. Maybe someday these global corporations will manage to cover all the bases around the world. And maybe World Peace © will come too. Both are equally likely.

* P.S.:  I know nothing about Moldova and Moldavian books. Just a random country my brain picked.

Tags: ,

Unimportant state in Windows Phone 7.0 apps can bite you on Mango

9/1/2011 5:40:40 PM

We’ve learned to preserve important state on tombstoning in 7.0 Windows Phone apps. But what about state we don’t care to preserve?

Most of the time we don’t care about the state of some variable so we don’t store it on deactivation and don’t restore it on activation. The smartest of us have probably thought about these members too, but I’m not one of them. Some of my code assumed that these fields are reset to their default/initial values, even though I’ve never thought about it explicitly.

Turns out when you recompile your app for Mango this state is actually preserved since your app’s process isn’t killed. When user returns to your app this “unimportant” object still has the same state as it was when the user left, but you may have programmed your app in a way that it assumes the state to be reset.

I was thinking about a good example to illustrate this, since my real situation was too cumbersome and specialized for a general purpose blog post. Suppose you have an app that does some processing. During the processing it shows a busy indicator or a progress bar and when it’s done it fires an EmailComposeTask with Body set to the results of your processing. In 7.0 if a user later returns to your app the process would be restarted and you would restore the important state. Is Visibility of the progress bar an important state you’d like to preserve? Probably not. But you probably expect it to be hidden, since it’s a default and the process is restarted. But are you sure you’ve collapsed it before firing the EmailComposeTask launcher? Chances are you haven’t, because you assumed it’s not an important thing to do, when user leaves your app anyway.

Not the most elegant example, I know. But you probably get the idea. It’s less critical to preserve the state of important objects in Mango, but you need to check your implicit assumptions about unimportant state being reset on return to the app.


Local(ized) Developer Resources Are A Waste of Talent

8/31/2011 7:02:12 PM

Photo by Stuart Caie

Living in a small country forces you to learn English to some extent to be successful in any area and especially in programming. On the other hand, developers in larger countries like Russia, China, Japan, etc. can be successful with no working knowledge of English, because of large internal communities. And even for them, I would argue, being able to at least read in English is a critical skill that should be learned before everything else. That said it’s pretty obvious why large developer platform companies like Microsoft invest into encouraging local talent in these larger markets to blog and speak about their technologies in local languages. It’s an open market and whoever serves it best wins.

But, as I mentioned above, developers in smaller countries comprehend English technical texts as good (if not better) than in their native language. After all not many know all the “artificial” local technical terms. We may suck at writing and speaking (like I do), but we are pretty good at reading. It’s nearly impossible to be hired for a developer position without being able to read in English.

Unfortunately large corporations have a generalized view on local evangelism. Local talent in small countries is encouraged to blog in the native language, creating content that is either already available in English or that 0,0002% of world’s population can read. Usually both. I think it’s a wasteful practice. Instead of creating real value for the worldwide developer community (and for themselves) these talented individuals waste their time on work that shouldn’t be done at all or done by translators.

And market rules that are easily applicable in large markets do not apply here. Because, guess what? No one cares about reading a blog post about solving a general programming problem in Lithuanian. And if I’m looking for a solution to my problem and can only find a blog post about it in Hungarian it’s a waste of someone’s talent. I could’ve solved my problem. I could’ve subscribed to this person’s blog, followed her on Twitter and suggested my local evangelist to invite her to an upcoming conference. But none of this happens because the global policy is to foster original localized content.

I think it’s stupid.

Tags: , ,

Service Work Kills Products

8/23/2011 4:01:43 PM

Photo by Nicholas Morant

I really enjoy reading stories about people breaking out of the machine and becoming indie developers. In Windows Phone world a role model indie developer is Elbert Perez. He has developed more than 10 high quality Windows Phone games and was able to quit his day job to pursue independent game development fulltime. He is really open about his professional indie-dev life and regularly posts updates about his experience in his blog at

In his latest update Elbert writes (emphasis mine):

I have taken extra side projects to help keep the coffers full, which somewhat slowed down the cadence of which I release my games. My strategy for making games has not changed, but I have become more open minded about taking on work for other people as long as it has something to do with WP7 or games.

And he concludes with

I’ve been really busy with other projects, but I am still working on my games…

That really resonates with me.

I’ve always wanted to be a product(s) “company”. I’ve worked on several products over the years, but I never had a runway (as in cash) to support a year of product development without reasonable return. So I supported my “dream” by doing contract work.

Except providing services pays (relatively) instantly and risk-free. And it’s a hard drug. The one that you don’t even enjoy, but have to inject to avoid withdrawal pains. Combining “working for yourself” with working on a product is much harder than working for a man and working on a product in your off-the-clock time. You don’t have any off-the-clock time when you work for yourself.

I’ve had a product which at the time it was launched (2003) was definitely contending for No.1 spot in it’s category. One problem – it didn’t make enough money to fully support me. And I had no extra money to keep me afloat while I was improving, marketing and otherwise working on it. So I fooled myself that I can work on client projects to fund the development.

Fast forward 5 years and my product, which only got attention now and then, was no longer at the top of the list. It is still successfully used in projects and products but I’ve totally missed a perfect chance at establishing it as a market leader. And the money I made working on these side projects is just money paid in exchange for labor. Bitch work. Even if well paid. No longevity.

So I decided to get rid of all the “service” work and concentrate all of my attention on the “product” work. Unless you have a deep rainy day fund you can’t just do this overnight. So I’ve been launching various smaller sites and products here and there and was able to accumulate Ramen-level stream of repeating income to support my endeavors. I did it on my own for a couple of years, but if you want some guidance on how to achieve this, just read The 4-Hour Workweek book.

So now I’m fully invested in my current product and, even it fails, it won’t be because I neglected it to get some shrimp into my ramen. And that’s how I know it will succeed.

I guess the moral is – if you have a good and promising thing going you shouldn’t waste your time chasing some extra cash. A few extra dollars won’t affect your well-being in the future, but a successful product will. There’s a Lithuanian proverb “Nemesk kelio dėl takelio”. This could be literally translated as “don’t get off the road for a trail”. I bet there’s some English equivalent, but you get the point.

Tags: ,

Modest Windows 8 Wish: System-wide Spellchecker

8/18/2011 4:12:10 PM


The BUILD conference is coming and lots of cool new revolutionary things about Windows 8 will be unveiled. I, on the other hand, want to ask for a simple mundane change from Windows 7 and earlier versions – move the damn spellchecker from Office [team] to core Windows [team]!

I write in 3 languages on a daily basis – English, Lithuanian and Russian. I have spellchecking for all 3 of them in Office apps.

I only have an English spellchecker in Windows Live Writer. That’s why there are a lot of stylistic mistakes in my blog posts, but not many spelling mistakes ;). But if I blog (say) in Russian, I don’t have a luxury of my PC looking out for me. So I have to either not suck at spelling (impossible when the last time I had to spell correctly in Russian was 18 years ago) or simply subject my readers to crappy texts riddled with spelling mistakes.

What’s worse is that in Internet Explorer 9 there’s no spellchecking at all. I know that there are 3rd party spellchecking add-ons, but they made the browser unstable in some circumstances. I honestly tried to use IE9 as my primary browser for a month or two but eventually gave up. There are other reasons why I use Chrome and not IE9, but absence of spellchecker is definitely my number 1 issue with IE.

The fact that all of the above mentioned products are made by Microsoft and that I have spellcheckers for all 3 languages installed on my machine is ridiculous. There’s no excuse for this except for some organizational issues inside Microsoft and I shouldn’t be exposed to them as a user.

I’m totally looking forward to all the cool things in Windows 8, but, please Microsoft, end this idiocy with spellchecking. There’s no excuse for not having a system-wide spellchecking engine with an API for 3rd party apps in 2012.

Tags: ,

The Age of Designer’s Revenge

8/16/2011 6:33:25 PM

Photo by Dan DeLuca

Back in 2004, when Transvaal Aquapark collapsed in Moscow, I remember reading a very long rant by some structural engineer about what she thought was a global root of the problem. I couldn’t find that post right now, but I remember the point of it vividly.

In USSR no one really cared how buildings looked. It was important that they don’t collapse and primitively serve their purpose. Structural engineering was way above than architecture in the ranks. Architects were sort of oppressed by engineers.

Sounds familiar?

Then Soviet Union collapsed and suddenly everyone wanted their buildings to be pretty. The balance between architects and structural engineers switched. And architects held a grudge from being abused and disregarded for all these years. So they started oppressing and disregarding engineers. The point of that lady was that it got to the point where engineers had no say in what makes sense and what doesn’t, which eventually led to tragedy.

If we take a look at software engineering, it’s difficult not to see the parallels with soviet structure engineering. Programmers “oppressed” designers for decades. In engineering driven companies like Google or Microsoft this is probably still the case. Listen to this episode of “This Developer’s Life” where Microsoft’s designer Michael Bach complains about this still being the case and mentions the Douglas Bowman’s post (linked above) about Google. But look at Windows Phone and you will see that the situation is changing.

This post was inspired by this tweet by Aral Balkan.


Aral is a well known user experience designer and speaker from UK. His talks are really inspirational and very well presented (even if a true geeky developer could argue that he is selling common sense ;).

Immediately after seeing this tweet I’ve remembered that architecture/engineering rant from 7 years ago. If you’ve never lived in USSR you’ve probably never seen this transformation. But worst type of tyrant is someone who was oppressed before and is holding a grudge. Or is this the only possible type?

So we’ve oppressed designers for decades. Some of them are definitely holding a grudge. And it seems that now is their turn to rule. Hopefully it won’t result in any global tragedies, but we, developers, should prepare to be abused. Or, you know … switch to user experience design.

Tags: ,

Copyright © 2003 - 2018 Alan Mendelevich
Powered by BlogEngine.NET