First let’s get something straight. Free does not mean free as in free beer. If the developer wishes to make it free as in beer, they can, but that doesn’t mean it has to be inexpensive. Free also does not mean ‘Open’ in the sense that we will let you see the code, but that’s it. Free means that You can look at the code. You can modify the code. You can have someone else modify the code. You can feed those modifications back to the people you got the code from, or distribute the modified code yourself.
That said, free does not mean that you then can restrict the code to the product you release.
Perhaps an example would be handy. Personally I type faster than I can write with paper and pencil. That’s hardly unusual, but it does impact how I work compared to some other people. There are also requirements on what I am allowed to take from work. With good reason. In any case let’s take this situation and realize that there are going to be times when I want to note something, and have it available, but which I don’t really need to save for tomorrow. Basicly I just need a scratch pad. It might be nice if I could copy portions into the copy/paste buffer, but let’s presume that’s provided at an operating system level, or even by the tools provided by the libraries I’m using.
Ok, yes I could use just about any editor, and at the end of the day tell it not to seve the content, but I really don’t even want to be bothered with the prompt. Often I’m in a hurry to get going some place else, and the prompt doesn’t always pop up immediately. More of a problem though is that the vast majority of editors have a lot of extra features buit in that forces the application to take a significant amount of time to start. I just want a scratch pad that’s almost immediately available. So:
#!/usr/bin/python # You may need to change for your distribution
'''
Scratchpad: A quick and dirty example of using a text area
from gtk as a scratch pad. No major bells and whistles.
'''
import Tkinter # library of functions we'll need
scratchpad = Tkinter.Tk() # scratchpad is a variable identifying an instance of TK
scratchpad.title("My Scratch Pad") # Nice to have a friendly window title
content = Tkinter.Text() # add an area to put text into
content.pack() # Put it all together
scratchpad.mainloop() # make it usable to the user.
Not a lot there eh? Well, for me that’s the entire point. But I can see where someone else might just want to be able to convert this into an editor. Tkinter has menu functions built in, and you could easily add a check on load to see if a file was given on the command line, add menu items to be able to load or save files, create new files, add tabs, etc. Probably the first thing to add would be a help option where if a user pressed ‘F1′ it would pop up a box telling the user what the intent of the program is, and how to use it. I’m hoping it’s reasonably self explanatory though, so for the moment I won’t be adding anything. Others can though.
You might be wondering if you can use this scratchpad. Sure. You will need to have Python installed on your computer. It’s installed by default on most Linux computers, you can download an installer from python.org for your computer if you are running Windows or a current Mac OS. (I Know it is available for Mac OS X, I don’t know about 9.x)
Once you have Python installed, you will need a text editor, the included IDLE will work, but under Windows Notepad will function just fine. I don’t run Mac OS systems these days so finding an appropriate editor is up to you, however vi should be available from withn the command prompt, EMACS, or the included IDLE editor for python should all work as well.
Open your editor, copy that code snipet from above, paste it into your editor, tell the editor to save the file with a usable filename, something like scratchpad.py, and close your editor. Under linux you will need to make the file executable using a command like “chmod +x scratchpad.py” in the appropriate directory. And from now on you can run the application simply by double clicking on the file. If you want you can create a link or alias to it from your favorite application launcher. How you do that is beyond the scope of this blog entry.
This will not work on the Android phone at the moment. The ASE release of Python does not currently support Tkinter. In time who knows.
Now as to a licence. I would honestly be surprised if anyone considered this worthy of a proprietary licence. I’ve done nothing within the application that is all that spectacular, and when it gets down to it, nothing within the tool is ‘creative’ it is essentially a simple instance of using included tools.
It also has flaws that I’m not concerned about fixing at this time. There is no scroll bar showing that there is text above or below the window view provided, and the text area does not resize if you resize the window. I can live with those flaws, but you might not like it enough that you want to fix those bugs. Or perhaps you want to extend the tool to give you statistical information about the contents of the scratch pad. You have to write a thousand word paper, well you could add a label at the end and refresh the content every second or two with the result of something like ‘i = content.text.split() ; statistics.label(“%i words” % length(i))’ And if you are using it that way, you might want to add those menus to save what you are editing. Go for it.
Now of course someone will be of the opinion that something like this is a great app, and they could market it. Well, great do so. You’ll note that you are free to do so. I would ask as part of the precept of free that if you are selling the product that you will be the point of contact for support for the app. I certainly am not going to be earning anything for my time providing support at this time, as the description above pretty much describes all of the support I can provide.
This really defines the real distinction between proprietary and free. To be proprietary at this point I would, and actually could, take the code listed above, use something like py2exe and create an executable, and possibly an installer for the program. However once I’ve done that, the resulting executable will only run under Windows. Mac users, you would be out of luck. For that matter, so would Linux users. I would have created a program that anyone running Windows could use. And while some would argue that that’s a tremendous market. Imagine that even 1% of 1% of the people running Windows paying $1 for a copy. I might even be able to retire. Well, yeah. I might even be able to hire someone to support the program. Who knows. The problem is that I personally am not interested in dealing with the support headaches.
The scratchpad shown above is scratching an itch. I needed a way to capture information temporarily. I’m not writing a journal or log of events that I will need to come back to at some point. I just decided to scratch an itch. That itch could be scratched using ‘notepad’ under windows, or for that matter any of hundreds of different editors. I just ended up still having an itch that needed to be scratched. So I scratched it. You are welcome to use the result, or not.
The proprietary solution would end up working more along the lines of ‘what is the need?’ ‘can we provide something to solve that need?’ ‘What is the potential for earning off of this?’ ‘How can we get our customers to pay for the program?’ ‘Is there likely to be a positive return on the work done?’ and so on. The biggest component however is the ‘How do we set things up so that ‘we’ get the money for this?’ question. To do that one has to make the product proprietary. Here is the end result of all of my work. Pay me, or you don’t get to make use of it. It may not do what you are looking for, but if you don’t pay me, you don’t get to decide that. And if it doesn’t do what you are looking for, that’s OK, I didn’t guarantee that it would.
Ok. enough of that. If you find the above information useful, you are welcome to decide if it is of value to you. I don’t think that the amount of work I’ve put into the program is worth money. But that doesn’t mean that you don’t. If you think it is worth sending me $1, I have to say I don’t know how you would do so. It’s a transaction level below what is sensible to send checks or money orders, and high enough to be a problem for PayPal to handle as personal transactions over time. Of course that’s a separate issue that I won’t get into at this time.
My issues with ‘proprietary’ over ‘free’ software are not the fees or commercial nature. My issues have to do with cutting out a significant percentage of potential users, and treating users as idiots. As noted above if I develop a proprietary product, It is very likely that I will have to limit myself to a single variety of potential users. You like Windows and I write for MacOS? Ok, you go buy a Mac. Doesn’t work well does it? If I write for Windows, and you run a Mac, things are a little better in that most macs have the ability to run Windows either embeded within mac, within a virtual computer, or in paralel with the Mac. However the latter two require buying a windows licence, which I suspect many Mac users are loath to do. And no I’m not going to tell you of the problems of running windows programs under Linux. Some will use dual boot, or virtual terminals, etc.
In short, by developing for a specific target platform you are locking yourself into only having those people who are interested in running that platform as your customers. After all, if you wanted to write for multiple platforms, you would need each of those platforms to develop under. (at some level.)
Treating your customer as an idiot is related to the fact that you are actively preventing the user from extending or improving your product to better suit their own needs. If you are Steve Jobs, or Bill Gates, and when you walk into a room you are the smartest person in the room, you might be justified in deciding that all your customers and competitors are idiots. Me? I’m not so sure, and I certainly don’t want to treat friends and other potential users that way.
So for me, I’ll stick with free solutions You don’t have to, but you probably will find it workable as well.


