MeatballWiki | RecentChanges | Random Page | Indices | CategoriesSkins, made popular with the MP3 program WinAmp?, are a simple way to provide some pizazz to software without complicated programmer involvement. By freeing users to change the graphic design of the GraphicalUserInterface?, they can personalize the software to their own tastes, and distinguish the software from the default boring design of mainstay software.

User skins are an ideal FormOverContentLittleEconomy. People have varying aesthetics. Graphic artists have no normal contributory outlet for their skills in an OnlineCommunity. But if the graphic artists can create skins for the benefit of other users, both groups will have an increased satisfaction in the site. Provide some space for a market for the exchange of skins.

CascadingStyleSheets make user skinning easy provided the software emits well-formed HTML (HtmlIsAssembler) with good semantic names for various components in the output. You may want to go an additional step of making a template system (cf. TemplatedWiki) that allows people to customize what additional functionality they want in their interface. For instance, SlashDot allows readers to select which slashboxes to display, and LiveJournal provides a whole language to create very tailored views on the basic LiveJournal functionality.

The major caveat is that skins may execute arbitrary code on the user's machine. After all, they form some sort of PublicScript. This means at the very minimum the community must EnforceResponsibility through PeerReview, ReversibleChange, and an AuditTrail. Unknown users posting skins with executable code should be treated with caution. Additionally, one can filter for unsafe tags and executable code (e.g. JavaScript, <embed/> and <object/> tags). The only way this filter can work correctly is to be very conservative, rejecting all syntax that is not explicitly approved, since new tags are added all the time.

Another caveat is that bugs in the skin may be indistinguishable from bugs in the underlying software from a naive user's point of view. Developers working on the mainstream functional may field complaints for skins they don't feel responsible for.

One elegant design is to make the main server solely ContentOverForm. It will be a NetworkService? that acts as a MicroKernel? of the PageDatabase. This kernel merely will publish data feeds with a MachineInterface that are rendered by another layer of the software, potentially external to the main site. This facilitates WikiClients, including robotic clients, special renderers, sites capitalizing on the RightToInclude, and other exotic SampleAndMix? cultural forms. The UserSkin merely then composes the various feeds into some graphic design. It may not include all the possible forms. It may filter the feeds through a third-party service, or from another OnlineCommunity. Of course, presumably the main server will appear to most normal users as a "normal" site, as the main server will have some rendering module as well.