The on-wiki version of this update can be found here: https://meta.wikimedia.org/wiki/Abstract_Wikipedia/Updates/2021-04-08
A few days ago we were asked for a mission statement for Wikifunctions, and we realized we didn’t have one yet. James Forrester then wrote a first draft, which the team slightly improved, intentionally inspired by the language used in the Wikimedia movement's vision:
“A Wikimedia project for everyone to collaboratively create and maintain a library of code functions to support the Wikimedia projects and beyond, for everyone to call and re-use in the world's natural and programming languages.”
I don’t expect this to be the final version, and you are all invited to improve it. It was pointed out to us that it is still a bit long and wordy.
That said, let's take a closer look at the text as it is now:
*“A Wikimedia project”*: Wikifunctions is a project https://meta.wikimedia.org/wiki/Wikimedia_projects by and of the Wikimedia movement, in the same sense as Wikipedia, Wikidata, Wiktionary, Wikimedia Commons, and the other seven projects. In that sense, it is both a wiki website and a community.
*“for everyone”*: When you think about the question of who will benefit from Wikifunctions, the answer is that we target everyone. There are practical limitations in reaching truly everyone: for example, a computer is a prerequisite for being able to benefit from Wikifunctions. That is different from e.g. Wikipedia or Wikivoyage, where the print-out of a page can be very useful without having to have a computer. But for a function to be useful, a computer will be needed in order to evaluate the function. Besides such limitations, we aim to be accessible https://en.wikipedia.org/wiki/Computer_accessibility, to be multilingual, and to run in many different contexts, both on- and offline.
*“to collaboratively create and maintain”*: Collaborative creation and maintenance is the core tenet of the Wikimedia projects. We don’t want individuals to have "ownership" over a function or a set of functions, to control what is accepted to the project, or decide which changes would be welcome. This is a collaborative effort, and the default assumption is that everyone can contribute new function definitions, implementations for new functions, that everyone can improve the documentation and the test coverage of these.
*“a library of code functions”*: This defines the new knowledge format that this project is addressing: code functions https://en.wikipedia.org/wiki/Subroutine. We are not talking about mathematical functions https://en.wikipedia.org/wiki/Function_(mathematics), but about functions for which we can provide executable implementations. We want to build a shared library of such functions that are connected with each other, that use each other, and that are built on top of each other. A single, comprehensive, common library also helps us to truly build on each other’s work. For example, if one searches the Web today for a function that calculates how many days have passed between two given dates, one can easily find faulty implementations that do not take leap days into account. By having one common library of functions to which anyone can contribute, we hope that we can increase the overall quality of code in the world.
*“to support the Wikimedia projects”*: As with Commons and Wikidata, the founding, primary goal of Wikifunctions is to support the Wikimedia projects. We want to first focus on functions that are useful for the Wikimedia projects, that can help reduce the maintenance costs in the other projects, and unlock new capabilities for the projects that have not been possible before.
*“and beyond”*: Alongside the primary goal, we don’t want to restrict the functions to only what is directly useful for the Wikimedia projects. On the contrary, we want to provide a comprehensive library of functions useful in many different areas: text processing, mathematics, natural sciences, health care, environmental studies, decision making, natural language generation, and many other areas.
*“for everyone to call”*: Everyone will be able to go to Wikifunctions, find a function, enter the input arguments, and have the system evaluate the function and see the result. We plan that making these calls will be possible via direct evaluation on the Wikifunctions site, via inclusion on a Wikimedia project, and via API calls. We expect there to be substantial value to the world exposed through the API and its use on third party sites, tools, and apps, in the same way that Wikidata statements, Wikimedia Commons media files, and snippets of Wikipedia and other prose content projects are re-used around the Web. Using a function does not need to be a direct experience, but can also be embedded in another experience: for example, it should be easy for a spreadsheet user to use a function from Wikifunctions, or to allow third-party apps to use functions from Wikifunctions, to have Wikifunctions functions be exposed through voice interfaces or command lines, and many more ways.
*”and re-use”*: For many people and use cases the above direct calls will be sufficient. But we cannot provide the computational resources for everyone and for all use cases. So we must make it easy for a user to take functions from Wikifunctions and re-use them, running them on computational resources they provide, or embed them in completely new contexts. As with all other Wikimedia projects, it should be very easy to download or export code from Wikifunctions for use elsewhere, as well as the simpler direct calls.
*“in the world’s natural”*: Wikifunctions aims to support all the languages of our users – our editors, our functionaries, our translators, our readers, our re-users, and all the people we don't yet reach. It will be possible to run functions in Wikifunctions from an interface in the language of the user, but also the natural language generation libraries in Wikifunctions will target hundreds of languages.
*“and programming languages.”*: Wikifunctions will allow people to write function implementations in a large number of programming languages. Unfortunately, adding a programming language to Wikifunctions will always be a bit of work, which will be somewhat of a bottleneck, and will require us to stage the deployment of programming languages. We will start with supporting Python and Javascript by the time Wikifunctions launches, but we aim to support many other languages in a relatively short period of time.
Thanks to Moriel Schottlender https://meta.wikimedia.org/wiki/User:Mooeypoo and Diana Montalion for prompting the question, and everyone on the team and beyond for thinking through it and helping with getting to a first draft of the mission statement.