The Free Software Movement is facing a dangerous evolution: Free Software Fetishism. For some Free Software developers, adoration of technologies such as vi, emacs, git, POSIX, glibc, linux kernel, etc. has become more essential to their identity than Free Software ideals. They ignore social risks posed by proprietary Web services built by large employers of Free Software developers, as long as their employer sponsors their favourite software or conference. They disregard opportunities that an emerging non-POSIX Web creates for wider acceptance of Free Software ideals, because it is not POSIX nor command line based. And they curse the development of new Web technologies as "diverting community resources to recreate what already exists" yet have adored git rather than contributing to svn, bz or hg.
Free Software Fetishism has reached its apogee with hurds of developers who prefer for example using emacs on a fully proprietary MacOS laptop rather than using a fully Free Software laptop without emacs.
Two people have opened my eyes on this evolution. The first person is the developer of a famous bootloader who could use equally well vi, emacs, kate, KDE, GNOME, Windows, MacOS, command line, GUI, etc. used for the first time the word "Fetishism" to qualify the lack of mental flexibility of some Free Software developers who isolate themselves into the adoration of a single tool rather than open their mind and leverage diverse tools and approaches at the same time. The second person is Tariq Krim, just before he launched Joli OS at a time Chome OS did not exist yet; he was the first person that I heard regretting the lack of understanding of modern Web by Free Software developers or their refusal to adopt it.
If you are a Free Software developer, if you suffer from Free Software Fetishism, if you are willing to cure yourself and if you think your brain is still capable of learning something different than vi, emacs or git, then this article is for you. You will learn in about 6 months how to adopt new Web technologies and how use your talent to contribute to the wider acceptance of Free Software ideals through the Web.
Step 1: adopt a Chromebook
The fastest way to experience modern Web technologies is to purchase a reasonable chromebook (4 GB RAM, 32 GB SSD, reasonable screen and keyboard), register to Google service and jail yourself into "Google life". From now on, you are going to experience the full "Google life" (or "Google hell" if one considers privacy) during 3 to 6 months. It is the typical time required to learn what modern web can do and discover new technologies that combine modern Web and Free Software ideals.
During that time, please ignore any privacy problems posed by chromebooks. Do not even try to solve them or think about them: it would prevent you from learning what must be learnt at this step. Try to become a normal user, the kind of user that only cares if the GUI is beautiful or if the application is cool. Be assured anyway that the question of privacy will be addressed later.
Step 2: abandon Free Software Fetishism
You are an emacs fan: forget it. You are a vi fan: forget it too. Do not even think about recreating in your chromebook your beloved GNU/Linux environment. One purpose of this tutorial is to change your habits an learn how and why the Web can be a great alternative to POSIX that can boost the adoption of Free Software ideals. Trust yourself: your mind is still flexible and you can still learn new things with an open heart.
Each time you face a problem and would like to solve it, do not think "which command line" but think about "which web site can solve my problem". Google your problem and use a web site to solve it.
Here are some exercises to test yourself:
- find a web site that can open ODF and edit documents;
- find a web site that can open and edit SVG documents;
- find a web site that can be used to learn programming in Javascript.
Step 3: play
During the 3 to 6 months period of Google life, try to play a lot with a lot of different tools that can run on chromebook. Install extensions and applications. Here is a short list of "must try":
- Web Store contains all kinds of applications and extensions. Try as many as you can. Have fun!
- Caret is a nice open source text editor for developers
- Zed is another nice open source text editor for developers
- NaCl development environment can deploy a GNU toolchain inside any Chrome Web browser and compile all kinds of software. Just think a second: any open source software can possibly be deployed nowadays in "one click" on any desktop PC (Windows, MacOS, etc.). Applications for education are enormous. NaCl is also a great innovation for security since it provides sandboxing technology that is way more secure by design than LXC containers or paravirtualization. NaCl sandboxing was actually analysed by automated proof by French Atomic Energy Research Center. Attention: make sure you set the chrome://flags to let allow signed extensions.
- python is an example of application of NaCl to run python inside a browser with good performance.
- vim is another example of NaCl application. But this example is bringing us back to Free Software Fetishism and it is probably better to learn first what can be achieved with NaCl, keeping in mind that NaCl provides a simple way to extend a Web browser with legacy software or libraries.
- Chrome Dev Editor is an open source IDE that can publish in one click a Javascript application on Chrome Web Store or on Google Play. The same application can run both on Chrome OS and Android.
- Offline applications provides a list of Chrome OS applications that can be used offline. Try them. It will demonstrate how modern Web can be both online and offline these days.
- Word Online demonstrates that even Microsoft is serious about Web these days. Word Online works better than Google Docs in my opinion, it works in China (unlike Google Docs) and it imports ODF files quite well (unlike Google Docs). The only downside is that it does not operate offline.
- WebODF is my favourite way to survive with ODF files (without losing privacy). It is also a great demonstration that recoding thing in Javascript can be must more efficient sometimes than trying to port legacy software to the Web (as LibreOffice/OpenOffice have tried for years).
- Evernote demonstrates that Android applications can now run on ChromeOS thanks to an NaCl based emulation layer.
- Run Android apps on ChromeOS extends the previous link thanks to a hack that can be used to port some Android applications to Chrome OS. Through this approach, many proprietary applications requires for daily business that are still not available on GNU/Linus traditional distributions should be available soon on Chrome OS. My personal hope is that WPS Office will soon be ported to Chrome OS in this way and provide a local tool to handle OpenXML files.
- Outlook is useful because it works in China where GMail is blocked and provides integration with Skype for chat
Here are now some hints to better use a Chromebook:
And now some suggestions of exercise to validate your knowledge:
- Find 10 open source Chrome OS applications that can work offline and check who made them (age, country, bhackground)
- Develop a small application with Chrome Dev Editor and publish it
Step 4: developer mode
After playing some time with Chromebook, it is time to try crouton, a set of scripts that can be used to run a chroot of Debian or Ubuntu next to Chrome OS and can ease the transition to Chrome OS. Crouton comes with an extension that can integrate legacy applications to the Chrome OS desktop.
In order to use crouton, you will have to turn on developer mode. On Toshiba CB30, hitting at the same time the power button, escape and the "refresh" button brings to a dialog that asks whether the Chromebook should enter developer mode. Read the documentation of your device to know which key strokes bring to developer mode (http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices)
Developer mode and chroot can be useful if you want to run a small web server or a MariaDB database. It is also useful to access a full ssh client, store some keys, use screen, etc. I still need crouton myself because I have to use the original version of LibreOffice/OpenOffice to write big documents. I hope however that I will soon be able to use OfficeJS instead.
chroot should however be considered as the last option during a transition phase between traditional POSIX style environment and pure Web. It can help a lot during the transition, but it goes against the goal of this tutorial and may actually prevent the transition to happen if it is used too much.
Here are some more links to understand what are the long term alternatives to chroot that you can already use today:
- HTTP Websocket server shows how to write a Chrome extension to turn your browser into a server thanks to the socket API
- SQL.js shows how to run a full database inside any browser (not only Chrome)
Step 5: Free Web
The idea of Free Web was invented in 2014 by Cédric Le Ninivin after he experienced "Google Life" on a Chromebook every day during 3 months. He was witnessing the growing adoption of Chromebook ins schools in United States, which now amount for 35% of PC sales in education (see "Why Chromebooks are schooling iPads in education" or "Chromebook Sales to K-12 Schools Reach New Heights"). And while using his Chromebook for his daily ERP5 developer job at Nexedi (using SlapOS open source PaaS), he found that everything in a Chromebook was "one click away" except one thing: software contribution. Even through great IDEs exist, such as Chrome Dev Editor, and even though the learning materials found on the Web with sites such as Codeacademy are awsome, the transition from being a Web user to being a Free Software contributor is not at all "one click away".
Compared to Apple device which until recently dominated education market in USA, the introduction of Chromebooks in schools may actually further widen the gap between the "ease of use" of thousands of Web applications and the "complexity of contribution" to Free Software. Le Ninivin's key idea is that code contribution should become "one click away", just like everything else, and should include a social experience that fun.
This is how the Free Web started. A Free Web site is a Web site that includes a button "Script Me" that opens instantly a window with source code that can be modified by the Web user, used only by him or shared with his friends. Imagine something like Greasemonkey but without extension, completely universal and built-in into every Web site that intends to join the Free Web movement.
Nexedi is now developing technologies to make this happen:
- scriptaweb.js is a Free Web bootloader that can be used to turn existing web sites into partially Free Web sites or that can be used new web sites that are fully Free
- jio.js provides an abstraction to access data. Consider it as a virtual filesystem or as virtual database that makes data in your javascript code independent of the browser of of the backend server and provides native offline support to any website
- render.js is a component system that helps developing reliable javascript applications made of independent reusable components
If you are willing to help, please read this tutorial: learn.renderjs.org. It will teach you how to make applications or web sites which logic is fully implemented on the browser side (and can thus be changed by end users) yet keeps data either locally or on a remote server.
Step 6: privacy
This tutorial is over. It is now time to quit Google life and to think again about privacy. A recipe for a free enviroment with better privacy can be found in the article "My First Fully Free Laptop: a Chromium Book". It is based on a standard feature of Chrome OS: Guest Mode. What's next? Use and develop free web applications that do care of user privacy. Let us now act as active developers by create better applications for the Web that will protect user's data.
Step 7: legacy
Most developers still develop server based software in python, PHP, Java, etc. Most Free Software developers still use their own laptop or PC to develop. Obvisouly, existing legacy of server based software can not be ignored nor eliminated in one day. A solution is therefore needed to support legacy without slowing down the transition to the Free Web ideals.
Some people try to keep their legacy laptop next to their chromebook or use chrome (or firefox) on their legacy laptop to develop Free Web applications. This is known as the worst approach because it prevents the mindset transition to happen. With vi, emacs, GNOME or KDE on the legacy laptop and Chrome OS on the chromebook, attraction to long beloved POSIX tools or keyboard shortcuts focuses the mind on thinking "how can I get on my chromebook what I have on my legacy laptop ?" rather than on thinking "how can I use a pure web based system efficiently and contribute to it ?". In the case of javascript developers using a legacy laptop or having one too close, will usually lead developers to use a server based version of grunt and handle most of the build process on the server side, rather than thinking for example on how to implement efficient browser based source code analysis in a true Free Web spirit.
This is why the approach I recommend is to put away any legacy laptop in a server room or in a closet, add to it a global IPv6 (with re6st for example) and never touch it again. Instead, use ssh or - better - a web based terminal optimized for high latency such as GateOne to access it, support legacy code or access legacy data. For new developments, use a Web based Platform as a Service (PaaS). If you are looking for a fully Free PaaS that supports any programming stack, use for example SlapOS Web Runner. SlapOS Web Runner can help a lot the transition to happen in a fully Web and devops spirit yet supports all legacy server based stacks with reasonable effort. If you need to quickly try some sofware in a legacy GNU/Linux distribution with minimal effort, use a Virtual Machine such as SlapOS VM For personal use, consider a dedicated server such as Kimsufi (4.99€ / month) or Online (5.99€ / month).
Last, you will need good networking to support legacy. Take a 4G phone and use USB tethering to connect your chromebook to Internet from anywhere. If data connection of your telecommunication company is too poor, then change company or complement it. For example, users of Free in France get a great 3G connectivity outside France at low cost and a very poor one inside France outside 4G areas. Owning a Bbox Nomad in addition to a Free smartphone can be a good solution to get European-wide connectivity. Same happens in Germany where many rural areas get poor 3G or 4G connectivity. Combining multiple mobile data providers can be a solution sometimes. If one needs global roaming at reasonable price, then consider products such as youyoumob. It works everywhere, even in China, and has a reasonable cost. And if one needs connectivity virtually anywhere, then Thuraya is one of the ways to go.
Acknowledgements
I would like to thank Rafael Monnerat for teaching me the basics of Chromebook usage and for demonstrating how to use Chrome OS Guest mode in daily life. I would like to thank Cédric Le Ninivin for the idea of Free Web because it brings back hope for mass adoption of Free Software in a world dominated by Cloud services.