Free Software For a Small Country: Part Two - The Training

The goal of this series of blogs has been to demonstrate the need for Free and Open Source Software in a developing economy. Now we will talk about how to develop that expertise in FOSS.


We may assume that the potential IT people either can or can not program using closed-source computers, but have at least seen and worked with a computer before, and that these people have access to the Internet and a fairly modern computer of some type.


A lot of people can be trained through private and public schools, of course. The advantage of using FOSS (and “Free Culture”) to train people is to cut the costs of the education, but more importantly to increase the value of the education.


In the case of software, the costs are not only the royalties of the software products. As we discussed before, sometimes these software products are pirated, but sometimes in a school or government situation the software products are granted by the companies “for gratis”. Unfortunately the software is still not “gratis”, as suppliers to the school or government tend to use the same software. When those suppliers buy the software, they pay the costs of that purchase back to the university or government.


Likewise when the students leave the school or university, they tend to use and specify the software they learned at that school or university. This is why companies “give” software to schools and governments.


Finally, when students attend a cooperative style of education (i.e. when companies work with schools to give students practical experience), the proprietary software that students use in the school is typically not licensed for use in industry. The students, familiar with the software, illegally use it in the industrial situation. Likewise industry, that typically licenses their software with site licenses or for specific purposes may inadvertently lead the student to using proprietary software in an unlicensed way.


Free and Open Source Software does not have these issues, as the software is licensed “for any purpose”.


Free and Open Source Software typically has lower costs in “license administration”, and other pseudo costs.


Finally, FOSS teaches a student not only how to USE the software to solve their problem or issue, but HOW the software works to solve that issue. Using the source code the students can see how the software actually does the computation. This is impossible with closed source software, even if the documentation gives block diagrams and written algorithms of how the code works.


What does a university do?


Many universities I have visited tell me that they use closed-source, proprietary software so the students will know how to use the software that industry uses when they graduate and go on to get a job.


This confuses me, since the university is telling me that the student is smart enough to build a bridge or a building, good enough to design an airplane or car, educated enough to run a country, but could not pick up a book (after using two or three office products) and learn to use Microsoft Office in less than a day.


The university is also telling me that the specific version of the software used is crucial to the student getting a good job. In that case does the university take back its diploma when the version of the product changes to a new version?


A university does not exist to get a student a good job. This is a byproduct of a university education. A university exists to teach a student how to teach themselves, to sift through data and find information, and to separate the probable from the improbable. The university is there to create the workforce and the government of the future. Without it, we would all go back to plowing the earth with sticks, or perhaps being “hunter/gatherers”. It takes technology to create a steel plow.


However, there is usually a path to gaining knowledge for various fields needed in society. Math, Physics, Chemistry are the tools of science and engineering. Literature, philosophy, law, finance are other tools for other curricula, and useful to everyone but more useful to some than others.


Therefore the university creates a curriculum of courses and books that lead the student to the knowledge they need to start their career. This curriculum is agreed upon by years of experience of the professors, advisory boards of industry and science, accreditation boards, etc. Often this curricula is published in the university catalogs, and more recently on web pages of the universities.


The university also certifies. They give tests to see if the students have learned the information and have the ability to solve problems and issues. These tests, and input from the faculty, lead to the diploma -- the “certification” of the university.


But there are other ways to learn and certify other than going to a university.


Self-directed Study


Several people I know never had any formal education in computer science. They may have had university training (and some did not have any university training), but their major (or even minor) was not in the computer field. Their knowledge of computers was completely self-taught.


Some of these people went on to become multimillionaires in the computer industry. How did they do this? By reading books, by practicing on their own with computers, by asking questions on bulletin boards, online forums, and other places. Did they have the breath and scope of a university education? In many cases, no. But they had the information they needed at the time, and learned more as they needed it.


University Directed Study


Another, more formal way is to get a university education is to look at the curriculum of the university degree, and obtain the books they use in the course. Often the books can be one edition out of date, still useful and a fraction of the cost. Or the books are “international editions”, available from distributors over the Internet at a fraction of the cost. Or electronic versions at a fraction of the cost (and weight). Also available are PDFs of books.


Some universities (and more each year) are publishing all of their course materials online as videos and presentation materials, free for the viewing. Forums are available online for almost any topic.


By studying this information, and using a reasonably modern laptop with virtual machines and emulators you can study almost any aspect of computer science. Using small, inexpensive machines like the Raspberry Pi and Arduino, you can build electronic circuits and see how they work.

This path will allow you to get the knowledge, but will not provide the certification unless you join the university.


Other ways to certification


If your goal is to be a systems or network administrator of computer systems, then there are vendor and vendor neutral certification programs available.


The Linux Professional Institute (LPI), CompTIA and others offer certification programs of different types. Since I am most familiar with LPI, I will discuss their program.


LPI is a vendor neutral, not-for-profit Linux Professional certification program. They do not teach courses, they only give certifications. Consequently the student can learn the material any way they wish.


The material is broken down into a "Certificate of Achievement" (Linux Essentials) and three certifications:

  • Linux Essentials (what the beginning Linux user needs to know)
  • Beginning Systems Administrator (LPIC-1)
  • Senior Systems Administrator (LPIC-2)
  • Advanced Topics (LPIC-3)

The last bullet is a group of advanced topics such as security, virtualization and others that lead the student to more advanced areas.


Each of these levels have objectives posted on the web site that tell the students the topics they should study for each set of tests. Each level also has sample questions and answers that the students can test themselves with. Once the student is ready, they can arrange to take the tests.


But what if the student can not take the test for some reason? What if the test is not offered in their area? What if the student has no money to take the tests, or needs money to live on while they are studying or attending university? Even if the university is free of tuition, some students can not attend, because they are supporting themselves or their families.


Apprenticeship and Cooperative Education


Since the sixteenth century Great Britain has had a system of apprenticeships. A novice at a task would apprentice themselves to a master craftsman and perform work for the master craftsman. Over time, as the master craftsman taught the apprentice, the apprentice would take on more and more tasks of higher and higher skill level. The master craftsman would pay the apprentice a wage so the apprentice could live while learning.


Eventually the apprentice left the master craftsman and became a “journeyman”, practicing their craft with other people, and learning other situations and other ways of doing things. The journeyman would take with them “papers” showing that they had practiced under various master craftsmen and these letters would act as letters of recommendation and “certification”.


After a few years a journeyman might pick a particular project to work on, with the completion of that project acting as their “masters' project”, and they too would be deemed a “master craftsman”.


A couple of years ago an apprentice program for systems administrators was derived in Great Britain and “apprentice” systems administrators can now work for senior systems administrators, be paid for their time, and learn their trade. Eventually they can take certification tests and eventually be recognized as “master” systems administrators. This program could be duplicated around the world.


Mentorships and cooperative education (where university students go to university part time and work part time) are other examples of the experienced lending their expertise to the student.


My own university education was augmented through both self-study and cooperative education. Without these two things, I would have followed a completely different path through life.




In addition to the certifications of various certification bodies, the student is also encouraged to keep a portfolio of their work. Documentation of the projects they work on, the difficulty of the work, the solutions they came up with, and the money and time they saved the employer are all useful in finding a new job.


This is particularly useful for programmers. With FOSS the applicant can show the interviewer the actual code they were working on, the mailing list interactions they had, the ideas they contributed and demonstrate their worth as a programmer to the person doing the hiring.

With closed source code none of this is visible to the hiring manager. All this information will never be made public.


When Mark Shuttleworth was starting the Ubuntu distribution of Linux (based on Debian), he reviewed the Debian source code and the mailing list. Mark saw who contributed good ideas, who worked well with others, who were good programmers and who were good leaders. He then contacted them and asked them to come to work on Ubuntu.


Where do we find the trainers?


People in many countries ask “How do we get started?”


First of all, you do not have to do everything or everyplace at once. Find one university in your country and have them agree to develop a program of training. Make that development process open to anyone that wishes to contribute. Set up mailing lists, forums and other collaborative mechanisms to allow people to contribute.


Take the computer science curriculum, and instead of teaching “Databases and Data Structures” with Oracle as the example, use MySQl, PostgreSQL, CouchDB and other FOSS databases and structures.


Instead of using only Microsoft and Apple operating systems as examples of Operating System design, use FreeDOS, GNU/Linux, NetBSD, OpenBSD and FreeBSD. Plan 9, Hurd and CMU Mach are other operating systems to study. It is, of course, acceptable to use Microsoft, Apple and other proprietary operating systems as examples, but the main focus should be with operating systems used world-wide in the worlds fastest supercomputers, in embedded systems, on desktops and in phones, but with the source code that the students can see and modify.


When teaching compiler theory, use the GNU compiler suite, and Bison and Flex as compiler tools.


All of these examples have the source code for them available, so the students learn not only how to use the tools, but how they work.


Do not teach JAVA as a language and think that is all the students need. Teach a wide variety of languages to show students how they differ. Almost every language in the world has a FOSS version of it. Most of the languages of the Web started (and continue) as FOSS projects.


Also teach assembler language. While it is true that most students will not spend much (or even any) time coding in assembler, the knowledge of these languages is fundamental in teaching how the computer actually works.


Next: Free Software For A Small Country: Part Three - Spreading the Love