Mercurial > hg > toolbox
view toolbox-blog.txt @ 2:458f2c48ecce
more docs
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Tue, 19 May 2015 20:08:52 -0700 |
parents | |
children |
line wrap: on
line source
Toolbox deployed Mozilla has a lot of software tools for a wide class of problems we typically encounter. We're self-motivated people: when we encounter a problem, sometimes we look or ask around to see if anyone else has did anything similar, but if something doesn't turn up (quickly) we'll write it ourselves. This is pretty much how (the functional parts of) the Open Source world works. It goes hand in hand with the bazaar model: http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar . The strength of the bazaar model is robustness: the process cannot be stopped by any particular point of failure. You get a robust ecosystem of software that evolves in a manner parallel to biological life. The weakness of the bazaar approach, especially when considered as part of an economic system, is that effort is duplicated. The Open Source revolution has made the greatest gains in proliferation: number of languages, number of software projects, and ability to easily fork existing code using distributed version control. But, just as the federated web is harder to achieve than information silos, harvesting and consolidating the vast richness of software is harder than its proliferation and not merely for technical reasons. Proliferation was largely a technological problem. This is best illustrated by DVCS. Consider the contrast between forking and merging. With centralized version control, both forking and merging are hard. With DVCS, forking is now trivial. But despite the fact that better tools have been introduced (which actually largely don't have anything to do per se with DVCS), merging is a human problem. Regardless of the amount of cleverness and hours required, technical problems are solvable and will be solved. Human problems can't be solved simply by throwing resources at them. Information curation will be the problem of this dawning decade. Using the internet as the predominent informatic presence in peoples' lives, the question has gone from "can this be done?" to "how do I figure out how to do this?" (shadowed only by the overarching question, "why am I doing this?"). Programming has lost its position to UI/UX design. Toolbox exists as a prototype to aid in unmixing the software tool soup. It carries two related purposes: 1. To give people a place to put and find software tools of a wide variety of types, purpose, and sources. To this end, a tool should have a name, a description, a URL, and appropriate metadata. Mozilla tools live in any number of places: in user repos, in shared repos, as web apps, on github, or at any number of off-site hosts. Often, for reasons of convenience and legacy, a useful tool exists packaged [*] as part of another tool or other piece of software. In this sense, toolbox is a software index, similar to PyPI or softpedia. 2. To give people a tool to curate the existing Mozilla tools towards the end of consolidating similarly purposed code towards discrete high-quality pieces of software. Often, as explained above, code is duplicated. This is done because either an appropriate existing tool could not be found (in an expedient manner) or existing tools were not appropriate to the task at hand. Toolbox, as a software index, should mostly solve the former case given proper participation. If an existing tool is found to be unsuitable for the task at hand, this can be for a few reasons: - no such software exists to solve the problem. In this minority case, there is nothing to do but to write the software or reconsider what you're actually trying to do - there is software that could be built on, but it is not an expedient solution to the problem. This again can be for several reasons: * the modification to the upstream project is easily doable and expedient, but a lengthy review/approval process hampers is practicability to a solution within the time frame desired. This is essentially a problem in the area of deployment/packaging since, in the open source model, the upstream code is freely available, but concerns external to the code itself (i.e. distributability) require more than just the code modifications for continuation of an operable software process [**]. In this case, an appropriate methodology is as follows: A. The issue is ticketed with the upstream project with the appropriate patch. B. A vendor branch is created of the upstream project with the fix applied. C. Relevent packaging/deploy systems are updated to point to the vendor branch instead of the upstream project. D. Changes to the upstream project are propagated (either manually or automatically) to the vendor branch. E. The change is accepted upstream. If there are no other discrepencies between the vendor branch and the origin, the vendor branch is deleted and all references point to the origin. If there are discrepencies, the particular upstreamed change is removed from the vendor branch and fetched from upstream. While none of this is hard, it requires time, management (i.e. attention), and adequate tools. * the modification won't be accepted upstream. This is similar to the above case, except the vendor branch will never (conceivably) go away. It is usually not possible to distinguish the case up front or in any predictable time-frame. It may also be conceivable to permanantly fork the project; that is, the vendor branch becomes a first-class resource (a project of its own right) versus a temporary necessity that should not (normally) be consumed downstream. * The modification to the code is hard in terms of required time to invest, required maintenance, and/or required attention to complexity. In general, the required work and maintenance will be unknown whereas the time to measure from nothing to a working solution may be more estimable. - there are one or more softwares that nearly do what you desire, but not quite. This is often due to a misclarity of intent of the software formulators, or software that may have originally had a clear intent but that has been adopted to fulfill more nebulous purposes. The above presents a best-practices scenario. In order for open source, as a global village, to sustain and flourish, the strengths of open source -- the unconstrained flow of information, the championship of the individual, cooperative advantage, and community ethics -- must be utilized and best practices must be achieved as the flowerbed is shared with corporate interests to which the open-source ecosystem, while competition for market share mandating utilization via its (often) excellent code base, the proliferation of potentially non-moneyed (and non money-oriented) alternatives represents a direct threat to the power structure[***]. More directly, effort must be made towards coherency and cohesiveness of open source. How does one bring order to the bazaar?[****] One must begin with an understanding of how the bazaar works. Open source programmers are, by inspection, largely good citizens (after a fashion). They allow consumption and distribution of their work, their source code, without exploit it for a capital advantage[*****]. If the process of organizing is fitted organically into their existing workflow, open source programmers will organize. If the practical advantage to themselves and to the system as a whole of organizing is perceived, a coder will go to the (non-over-burdening) required effort in order to make this so. When first exposed to tools such as issue trackers, VCS, automated testing (e.g.), programmers often first resist adoption of these technologies until a case clearly manifests that the tool in question does (or more often, would have) saved considerable time, effort, and/or status. Then the developer uses the tool and will consider anyone who, as s/he previously did, does not naive. This pointing of arrows is an example of how the bazaar works: individuals are agents and operators of information, but the transfer of information, which is in what makes information valuable, is a transpersonal process. You do not bring order to the bazaar; you plant the seeds and nurture towards a bountiful harvest. ------ [*] using the term loosely [**] For instance, consider a software project requiring a one line modification of gcc to build. Assuming even that this one line is a proper and non-contraversial fix for a gcc bug, gcc releases are heavily checked for stability and released only periodically, so the turnaround even given a swift review process will be long and also in general unknowably long. The software project in question can, as a patchwork fix, require its developers to apply the patch to their own gcc source and build their own compiler to continue project development. However, this raises the bar to entry quite a bit, skill-wise, time-wise, and psychologically. In addition, while previously the project could require a particular OOTB version of gcc, following the patch requirement, precise build instructions must be provided and it will become difficult to diagnose what is going wrong with particular compile errors. All legacy developer environments will be rendered non-working and all developers will have to apply the same additional work to get a good development environment going forward unless tools are provided. [***] Open source is not unique in this particular position. In fact, the anti-marketing market is a large market. Consider sales of Che Guevera t-shirts, feminist literature from the traditional publishing oligarchy, and Hollywood's marketing of the underdog. In all of these cases, that which is being peddled is -- symbolically and sometimes literally -- in direct philosophic conflict with the marketeer. The market, however, cares only to the degree that this is perceived as an existential threat (which is usually not at all), and subversion may be safely sold and counted only in terms of dollars. If the Recording Industry Association of America ever needed a slush fund, it could easily gain an buffer by selling plain white cotton T-shirts emblazoned with the logo: "Destroy the RIAA". [****] The question itself is intentionally flawed [*****] There is the case where (a) programmer(s) intentionally (conciouslly or subconciously) will set up a consulting firm installing overly complex house-ware, charging for their expertise, and then running. While this does happen, it is not a major factor in open source at large.