What is a Community?

This week Mike McGrath started an interesting flame war here which asked us all the very interesting question: What is Fedora's Market. This of course led to the usual affirmations that Fedora is 'bleeding edge', 'for the hobbyist/tinkerer', or really just for the person who wants to do new and exciting things. Today however, I saw a funny blog post by Tom Callaway, on his efforts to introduce a new feature in Fedora that allows people to track packages by license. Unfortunately for Tom, and my heart goes out to him, his idea was shot down a bunch of people whose response was to "Whine, Bitch [and] Moan." I had also been reflecting on how Con Kolivas is no longer writing kernel patches.

This had me wondering at a second and even more nebulous question to ask.

What is a Community?

Growing up, I had the fortune to live in a jewish community that talked about the morals of building a community through religion and social exercise. People always commented that my high school class was amazingly unified between all the different levels of classes socially, and there wasn't this stratification of who belonged to the 'smart' classes or the 'dumb' classes. At the same time, I would go home to see my parents and family integrated, but looked at funny because we had ever so little less money than our neighbours, and were ever so stranger than they were. So if you asked me what a community is, I would say right out that it's a group of people that align themselves together based on some common bond. Well, it's not necessarily an open community.

An open community, however, is an entirely different breed. It's a group of people that are willing to accept anyone regardless of who they are other than their desire to participate. It certainly has been a mantra of the Open Source development style. It accepts anything, and everything, and of course, if you can't keep up, you sink underneath the mess. If you manage to stay afloat, you're rewarded with the best of the best software available to mankind. This is also the bazaar style development, or in some cases the bizarre.

There are of course always the closed communities, which in the software world leads to cleverly, but cleanly architechted software. Even when they are open source, there is certainly this base hierarchy of being either in the inner sanctum or pond scum. Oddly enough, this has actually been Red Hat's model for years, and continues to be that. They take what they like, polish it into first RHL, now RHEL and friends, and then return as much source code as they can back to the community. Red Hat has been very clear about who stands in their community, and who doesn't, and it all starts with a paycheck.

Fedora is going through an interesting transition though. For six versions, it's been a closed off effort, courtesy of Red Hat, whereby the only people that could directly contribute were Red Hat employees. However everyone started realizing that outsiders could make better packages than Red Hat, and eventually Fedora was opened up. Cool! But now what? I'm hesitant to bring in other distros into these sorts of discussions, since they eventually turn into flame wars, but let me give you an abridged list of "Open Community Distros" (by my standard of course ;): Debian, Gentoo, Ubuntu, and *BSD (generally speaking). These are the best models to look at if you want to understand how an Open Community operates. Well, *BSD's aren't really open, the rules to submit patches and have them accepted are strict. Ubuntu and Debian have that crazy MOTU and NM processes, and Gentoo seems to have lost it's wind. Not than anyone is perfect of course. But one thing that these distros are good at is accepting all sorts of ideas, incorporating them, and weeding out the bad ones. (Yes, I do know *BSD is not a 'distro').

One of these distros has a little funny document called the Debian Social Contract. This is the defining document for what constitutes the basic foundations of the distro, and the community that surrounds it. From that came out a rock solid distro, that serves practically any need one might have from Linux. You can call it overkill if you want, but to be quite honest, I enjoy Fedora development more working inside Debian than I did on Fedora.

So in response to this ugly trend I've been noticing where people are getting shoved out of the Open Source community, and feeling left out, I want to propose the start of a Fedora Social Contract. (Disclaimer: I have read the DSC (the Debian one) before, though it's been a couple of years. I haven't read it lately, although if this catches on, I will of course read it for inspiration. I do not want this to turn into a clone of the DSC, although if it does, I think it means that the DSC is a very well written piece of fine bathroom literature :) ) (Second disclaimer: I enjoy reading in the bathroom ;) )

So without further ado (except this one: ADO!):
1) Fedora is open source and an open community
2) Everyone is welcome to voice an idea, and everyone is welcome to say no. The Fedora project is of course neutral. Implement your idea.
3) We are part of a larger community, participation in this one implies participation in the larger one as well.
4) Therefore, everyone is welcome to submit changes, fixes, improvements, anything they wish to see. Provided it's technically feasible, we will make your submissions available for evaluation by the community. This is not a guarantee that it will be submitted to a release.
5) If one other person finds this feature useful, the submitter will have an option to submit it in some way to the Fedora Project, should there be an objection greater than the desire for submission (and a lawyer will hate me for that last sentence ;)), all efforts will be made to ensure that the submission remain optional, and not installed be default.
6) To ensure that we provide a quality distro, there should be a core set of packages that have been approved by people trusted by the Fedora Project to this purpose. The term core packages can imply 20,000 packages if we ever had that much time on our hands. For a submission to pass this review, it must meet quality standards (not limited to proper package naming, quality of install scripts, likelyhood of the package destroying the universe being minimal, etc...), however, so long as it is packaged properly, it is up to the community to decide if they wish to use it.
7) Should the submitter, or an heir to the package leave the project, only then is the removal of the package from Fedora up for discussion. If members want to see a package in the distro, they have to do the work to make sure it stays there.

I'm sure there's plenty more that can go there, but they would probably be elaborations on the same thoughts. I'm also sure there are plenty more social contract type clauses that would fit, and I just haven't thought of them yet. Anyways, I make them available via the Creative Commons if someone else would also like to write a social contract. I'm sure I'll have plenty more to add by Monday.
  1. I'm 23 years old. Pretty strange, huh?
  2. I just signed up for mugshot and twitter. Now I have my facebook integrated into my mugshot integrated into my twitter integrated into my facebook. It's a wonder they don't explode or start a flamewar.
  3. Smolt is getting better. Every random complaint I keep seeing is already in the upstream repo, or two lines of code away. Soon it will eat your soul, and you will thank it.

Turbogears and Seam

I want to shake Kevin Dangoor's hand. I probably would like to meet Gavin King someday, because he seems like a smart fellow too, but Kevin Dangoor is a genius. We've been struggling with JBoss and Seam in our group for over six weeks now, and so far have produced an overengineered, complex, brittle application that works on only half of our boxes. To be honest, development has picked up quickly when more energy is applied to it; however, if you look at it mathematically, I think it's a useless point. Out of curiosity and frustration, Robert and I hammered out a simplified version of the app, complete with CRUD pages in two nights, using Turbogears and tgcrud. It's far from complete, but it didn't take that long. Fleshing out the data model to include all the information should be relatively easy compared. Generating the crud pages again will take about 20-40 minutes depending on how complex it gets. But if seven people were to work on adding in the other stuff, in an organized fashion, I think we could have this app done in about two weeks time.

What I really don't understand is if Seam has all these goodies, (and the sheer number alone really impresses me, coming from a Struts background), why does it take longer to develop for it? Well, I probably do. Our group certainly isn't within the statistic norm. For most of us, this is the first time doing an enterprise application. When the code base expands, seam should keep the maintenance required fairly level, and the level of difficulty in adding more content should also be low. In contrast Turbogears is missing alot of these features. Yet setting up what we needed on a basic level was Very Very Fast (TM).

Either way, here is what we've done in the past three days.
  • We discussed a simplified version of the data model, so that we could do some RAD, rather than making sure stupid stuff, like validators for each and every piece of data were correct and functioning.
  • That was implemented in almost no time at all in SQLObject
  • Bobby pointed me to tgcrud, which I spent an evening going through, and setting up. It's buggy, it's not polished, but I got some useful starting pages out of it.
  • I put a few touches on them, and we have some barebones crud pages that will let us populate the database theoretically.
  • Using one of those CRUD pagesets as an example, I've been working on a CRUD Widget, that can be embedded anywhere almost pythonically. I'm nearly done.
The CRUD Widget is my little pet :). I was looking through Seam's and other's ideas about CRUD and realized that they leave a few questions about relationships (such as the whole OneToOne and OneToMany thing) unanswered. Let's say I'm entering information about Employees and Divisions. An employee is in only one division. The relationship is fairly obvious. So let's just say I'm going through a list of things I have to entire in, name, address, phone, payroll information, hair colour, astrological sign, favorite food and colour, most recent dream, and shoe size. Oh yeah, and Division. I go through all the rest, with little trouble, but when I get to division, i realize that he is the first person to work for the newly opened Pizza Eating division (which every company should have one.) So I click "select division, then new division" and a popup shows up that gives me a form to create a new division. I click save, get a flashed message "Division Created, word domination options available", and then go along my merry evil genious way. Having a crud widget that can be fetched from the server to show up in AJAX, or a popup or a whatever (ever hear of a flooxamble? I hear they are a popular input method of choice on gthBoxl these days).

To put this in MVC perspective, there is the model, that is the database object, in a nutshell, with metadata such as validation. There is the view, that shows how to display a view to do whatever to said model, and the controller which can push data changes from the view back to the model. It's a mini MVC component, that can be integrated almost wholesale into the app. The cool thing is that you will be able to put controller code, via python that will know how to get information from the view to the model. Likewise, there will be a small snippet of code that has to almost cut and paste into the KID file, for parsing. Finally, I want to make this generic, and templatified (I made that word up ^_^) so that I can make this simple to do via tgcrud.

What's left to do? Make complicated pages with more unique ways of looking at the data. Such as having a user login and only see information pertinent to their group, rather than just a generic list of events. There are a number of things that Seam does quite neatly to make this easier to develop. TG doesn't have them. It'll be interesting to see how far I can go in my spare time to make this work.

Happy 4th, aka declaration of presumed (falsely) right to bully the other nations of the world day!