Category Archives: Open source

Open source

Open source community should employ Microsoft’s business strategies

In one of the press conferences I attended 6 months ago, Steve Bulmer was asked “Why can’t Microsoft be cool like Apple?”

His reply was simple and to the point:

“I rather be popular than cool”

He further explained that Microsoft business strategy is to try to reach EVERYONE and not only the cool guys.

I suggest that we, as the open source community, employ the same logic:

“We rather be popular than the good and righteous”

Let me explain why we should be popular rather than right.

The baseline assumptions of this article

  1. Microsoft is popular – at the time this article is written, Microsoft has a large market share in many IT and retail industries – the company must be doing something right.
  2. Open source is less popular – at the time this article is written, most open source products do not have the market share their makers have wished for – so there is still something we need to do
  3. One of our targets as open source community is to become more popular – growing popularity and market share will drive open source prosperity in many aspects

The secrets of Microsoft’s popularity and market share

These are all well known and published secrets:

  1. Microsoft focuses on creating mass-market products – if it is not a 1 billion dollar in revenue you can forget about it.
  2. Microsoft excels at creating an echo system of partners and independent software vendors (ISV)- it is estimated that Microsoft eco system earns 9$ for every dollar Microsoft earns. Think about it!
  3. Microsoft spends millions of dollars on user experience – my Ubuntu might provide a great user experience but to fix things I sometimes need to go to command line, it’s been a very long while since I had to go to the command line to fix something in XP. Anyway, my point is that Microsoft puts great emphasis on how it looks.

Why isn’t open source as popular as it should be?

As always, it is mostly a matter of perception:

End users: ‘It is too hard’ ‘I am not a techi’ ‘There is no proper support’ ‘It does not come out of the box’

From a consumer perspective, most open source products are considered a niche and the realm of the super-technical (AKA geeks). I am not talking about popular products like Firefox, I am talking about the less popular majority of the open source offering. While most consumers find the mistaken notion of open source as free in the “free beer” perspective, they are still hesitant about support, user experience and simplicity. People think that some problems in open source products require command line, and let’s admit, VI is still not the preferred way of the masses to fix problems. Additionally, most consumers do not install anything by themselves, they like their software to come out of the box, preinstalled and ready to go.

Partners and ISVs: ‘Too complex’ ‘High risk’ ‘No commercial support or liability’ ‘Contagious license, I have to be open source as well’

From a partner perspective, open source sometimes seems as a risk to work with. Some commercial independent software vendors are afraid of lack of support and accountability. Simple, UI-driven integration between open source products, is still something rare, and human documentation is sometimes lacking (not talking about geek forums). Additionally, some cooperate lawyers are more afraid of open source licenses than the bubonic plague. One should not under estimate this last point, lawyers stop any development and partnering program in a blink of an eye, no matter how affordable and profitable it might be, it is their job to do so.

The first steps towards growing open source market share.

  1. Use the 80/20 – Pareto law
  2. Create mass market products – 20% of the applications drive 80% of the adoption. Firefox is an example of a great adoption driver.

  3. Focus simplicity – KISS lawKeep the project easy to use – aim for the lowest common denominator and work up from there.Always ask yourself – if I wasn’t the subject matter expert, would I find it easy and simple?

    Always ask yourself – can I achieve this functionality in a simpler, clearer way?

  4. Focus on UXUser experience is under estimated by most developers but please believe me – user experience is THE KEY for the success of 90% of any software project
  5. Don’t use GPLUse a commercial friendly open source license like Apache, MIT or MPL. Read the next section to learn why you should do that.

Why I think GPL is a poison pill for open source market share.

I was working in a big Telco company at the time when I got this kind of email -“All development over open source products or libraries should be stopped. A list of all open source licenses should be sent to the company’s law firm”

GPL is considered a dangerous license. It does not matter at all if that is true or not (I think it is not dangerous)- it is a matter of perception and not truth. Changing perception is extremely hard. Public perception sends people to jail, and makes stock markets fall. Even Microsoft found it hard to change perception regarding Vista.

GPL is considered contagious sticky open source license, it is also considered dangerous because people think it will make their software GPL without their consent, but worst than that, it is considered hard to understand and untested in court. If I was a lawyer, I would consider it a risk and lawyers, even more than most people, try to avoid risks as much as they can.

Some might say that GPL has done the open source community a lot of good, that it is the right way to secure the openness of the code, but look at our basic assumptions – right is OUT, market share is IN.

We as an open source community should drive software released under MPL, Apache, and any license which is considered safe and simple, and hope that the GPL perception slowly fade away.

Will Microsoft be hurt from this new approach?

No, it will thrive. Microsoft, like all super-big companies, is driven by revenues and market growth. If the open source will be successful and drive the market to grow, it will also grow Microsoft’s market. In simple terms if the market grows as a result of these recommendations, and it will, everybody will benefit from this- Google, IBM, Microsoft and all the rest of the big and small software and hardware vendors will cheer the open source community.

There is hope at the end of the tunnel.

We have made great progress; some open source products are now very popular both in the server side and the client side. If we employ a little more business savvy strategies and generate strong partners and echo system we will grow the entire software market. We will not only drive the open source business, but also benefit others and even help fight recession.

One big happy family, Right?

How much should a web site really cost?

Lately I have been asked by many people how much should they pay for a personal or small business website. It seems that these are good times to get some extra cash from a web initiative.

The problem is that, for most people, building and hosting a website is somewhat of a mystery. And when people treat something as a mystery they tend to over complicate it and over pay for it. Some people I talked to spent 20-100$ on simple basic hosting alone! That is, in most cases, more than what they need to pay.
Continue reading

Useful tool – Vista Battery Saver

Yesterday, I lectured on environmental technologies and had a chance to present, what I think is, one of the most useful ,open source downloads for people who use Vista on their laptop.

A few months ago, my friend Tamir Khason has released a super cool open source application called Vista Battery Saver.

"This tinny program will save up to 70% of your battery by disabling those nice, but greedy Vista features. Running in task bar with private workset of 5.5M and 0% CPU it will do all work for you, by enabling and disabling customizable features when power source changed or battery power fall under certain percent."

vista battery saver

Saving battery time does not only prolong the time you can use your laptop without recharging, it also reduces the total energy your computer uses. you might think it is nothing but this makes great difference if all of us use it (plus, it is free!).

Does the open source professional services business model suck?

Today I participated and lectured at an open source event. It was great to meet enthusiastic people that believe in something bigger then themselves. These events are always a mixture of young people full of vigor and need for rebellion as well as more balanced older people that have believed in open source for a long time.

I have been intrigued with open source and open source business models for a long time now, so I might belong to the second group.

Anyway, in the keynote, the speaker talked about open source business models, saying that the professional services business model is better then proprietary code business model because it provides real value to the end consumer and because you get a return of your investment in this business model.

Well, I have my reservations:money

1) I have seen companies misuse the professional services business model (open source or not) – selling poor service and wasting the clients time and spending his money with "experts" that know very little.

2) There is no motivation for a company, basing its business on open source development and professional services, to create simple and easy to use application. This is because simple and easy to use applications do not generate the need for professional services. Professional services thrive on complexity and difficulty.

opensource-110x953) Professional services business model (open source or not) can create a tension between the service provider that wants to prolong the duration and manpower sent on a project and the client how wants exactly the opposite

4) I am not sure the open source professional services business model is a big enough business to drive the entire market to open source products or to sustain open source companies.

I have once personally been told in an open source project – “Do not add this auto-configuration feature, it will kill our professional services” of course after a long “discussion” we added the feature, but the potential to provide a sucky product just to satisfy this open source business models was still there.

I am still thinking about and waiting for the business models that can really sustain and grow a  large scale and successful open source company.


You might also what to read how to spot a good software consultant

PHP calling .NET – PHP to WCF calls with parameters

In my last post I provided an example of PHP calling a .NET windows communication foundation web service. The PHP invoked the .NET service with no parameters, getting the time on server.

Sometime (well, most of the times) you need to pass parameters to the .NET web service. for example you might want to pass a client ID and get back its account balance.

 

Here is what you do:

First create a "out of the box" windows communication foundation (WCF) WCF service library project ( I used Visual Studio 2008) .

Then, modify the project files according to the files posted bellow. 

My server side WCF code looks like this:

1)  Service1.cs –

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WcfServiceLibrary2
{
    // NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in App.config.
    public class Service1 : IService1
    {
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

    }
}

2)  IService1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WcfServiceLibrary2
{
    // NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in App.config.
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string GetData(int value);

    }   
}

The server side WCF application configuration (App.config) file looks like this:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!– When deploying the service library project, the content of the config file must be added to the host’s
  app.config file. System.Configuration does not support config files for libraries. –>
  <system.serviceModel>
    <services>
      <service name="WcfServiceLibrary2.Service1" behaviorConfiguration="WcfServiceLibrary2.Service1Behavior">
        <host>
          <baseAddresses>
            <add baseAddress = "
http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary2/Service1/" />
          </baseAddresses>
        </host>
        <!– Service Endpoints –>
        <!– Unless fully qualified, address is relative to base address supplied above –>
        <endpoint address ="" binding="basicHttpBinding" contract="WcfServiceLibrary2.IService1">
          <!–
              Upon deployment, the following identity element should be removed or replaced to reflect the
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity
              automatically.
          –>
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!– Metadata Endpoints –>
        <!– The Metadata Exchange endpoint is used by the service to describe itself to clients. –>
        <!– This endpoint does not use a secure binding and should be secured or removed before deployment –>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfServiceLibrary2.Service1Behavior">
          <!– To avoid disclosing metadata information,
          set the value below to false and remove the metadata endpoint above before deployment –>
          <serviceMetadata httpGetEnabled="True"/>
          <!– To receive exception details in faults for debugging purposes,
          set the value below to true.  Set to false before deployment
          to avoid disclosing exception information –>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

 

Note my blog post about the importance of setting this WCF service binding to basicHttpBinding

The PHP side of the application code looks like this:

<h1>
<?php

try{
    $client = new
        SoapClient(
            "
http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary2/Service1/?wsdl"
        );
    $params = array(‘value’=>"3");
    $webService = $client->GetData($params);
    $wsResult = $webService->GetDataResult;
    print  $wsResult;
} catch (Exception $e) {
    print  ‘Caught exception: ‘.  $e->getMessage(). "\n";
}

?>

</h1>

 

This is very similar to the previous example of PHP to WCF communication, only here the PHP passes an array of parameters to the WCF web service:

$params = array(‘value’=>"3");
$webService = $client->GetData($params);

In my next post I will show how to investigate the WCF service and learn the parameters it requires and their soup names.


PHP calling .NET – PHP to WCF communication

I am done doing my first PHP to .NET interoperability example. In this example a PHP page calls a windows communication foundation (WCF) service in .NET

Here is what we want to create:

php-wcf 

 

First create a "out of the box" windows communication foundation (WCF) WCF service library project.

Then, modify the project files according to the files posted bellow.

My server side WCF code looks like this:

1)  Service1.cs –

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WcfServiceLibrary1
{
    // NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in App.config.
    public class Service1 : IService1
    {
        public string GetData()
        {
            return string.Format("Time on server is " + System.DateTime.Now.ToString());
        }

    }
}

2)  IService1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WcfServiceLibrary1
{
    // NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in App.config.
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string GetData();

        // TODO: Add your service operations here
    }

}

The server side WCF application configuration file looks like this:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!– When deploying the service library project, the content of the config file must be added to the host’s
  app.config file. System.Configuration does not support config files for libraries. –>
  <system.serviceModel>
    <services>
      <service name="WcfServiceLibrary1.Service1" behaviorConfiguration="WcfServiceLibrary1.Service1Behavior">
        <host>
          <baseAddresses>
            <add baseAddress = "
http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
          </baseAddresses>
        </host>
        <!– Service Endpoints –>
        <!– Unless fully qualified, address is relative to base address supplied above –>
        <endpoint address ="" binding="basicHttpBinding" contract="WcfServiceLibrary1.IService1">
          <!–
              Upon deployment, the following identity element should be removed or replaced to reflect the
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity
              automatically.
          –>
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!– Metadata Endpoints –>
        <!– The Metadata Exchange endpoint is used by the service to describe itself to clients. –>
        <!– This endpoint does not use a secure binding and should be secured or removed before deployment –>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfServiceLibrary1.Service1Behavior">
          <!– To avoid disclosing metadata information,
          set the value below to false and remove the metadata endpoint above before deployment –>
          <serviceMetadata httpGetEnabled="True"/>
          <!– To receive exception details in faults for debugging purposes,
          set the value below to true.  Set to false before deployment
          to avoid disclosing exception information –>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Note my blog post about the importance of setting this WCF service binding to basicHttpBinding

 

The PHP side of the application code looks like this:

<h1>
<?php

try{
    $client = new
        SoapClient(
            "
http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/?wsdl"
        );

    $webService = $client->GetData();

    $wsResult = $webService->GetDataResult;

    print  $wsResult;

} catch (Exception $e) {

    print  ‘Caught exception: ‘.  $e->getMessage(). "\n";

}

?>

</h1>

The only thing you need to modify is the URL parameter passed to the SoapClient to match your WCF service URL.

If you want to pass parameters to the WCF web service call please see this blog post.

If you have any questions please post a reply.

Switch from Internet Explorer to Firefox?

Lately, I seem to have a problem log-in into Gmail from my Internet Explorer, this happens both at work (IE over Vista) and at home (IE over XP). 

I get this wonderfully informative error message: 

gmail

Doing a couple of “refresh” helps sometimes.

But what really helps is using FireFox instead of Internet Explorer- This problem does not happen in FireFox.

Some of my friend and colleagues have reported the same problem.

How to make money from open source / open source revenue models

A friend asked me the other day: “I heard you work for an open source company, must be frustrating not making money from your code… how can you make money if you give away your code and IP?”

Well, I have been asked this question many times, and it is time I put my answer in writing:
You do not make money out of open source. You can, however, use open source to create profitable revenue channels and sell other products and services that are related to open source.
There are at least three revenue models based on open source leveraging:

1) Dual license model

Release the product under a restrictive open-source license and provide an alternative proprietary license. This is a good strategy if you have some sort of monopoly, if you are a market leader or have an open-source product that no one else has in the open source world.

Motivation: The client really likes the open-source product and needs it for commercial use. He does not want to breach the open-source license and is willing to pay for a proprietary license.

Open-source license: GPL is the only suitable license to this strategy because of its restrictive constraints and its viral behavior (you need to be GPL to use GPL).

Example: MySQL

2) Dual product model

Penetrate the market by releasing an open-source product, sell a different product (extended version, plug-ins or an application that is based on the open-source product). This is a good strategy if you have an up-hill struggle to become a market leader or if there is strong competition. You utilize the open-source to become a well-known business technology leader.

Motivation: The user gets to be a part of an open-source community process, contributes to the source and improves it. Users purchase other related products from the project professionals.

Open-source license: MIT, BSD, Apache or any other non-copyleft license.

Example: eclipse and its non open source plug-ins.

3) Professional services model

Sell support/customization and other Professional services. This strategy requires a large base of clients that want to use the product. In addition the product must not be simple to use or else users will not need any professional services. There is no problem implementing this strategy combined with one of the other strategies, in fact it is recommended as a complementary strategy for both.

Motivation: We are the experts in this open-source project because we wrote it, therefore clients would like to purchase support and other services from us.

Open-source license: Any

Example: JBoss

I am currently exploring other ways and I will keep you up to date.
You might also read these articles:
Does the open source professional services business model suck?
Software As A Service Takes The “Free Beer” Out of Open Source