Please do not edit this page, add your comments, suggestions and so-called corrections (GNU/Linux for example) on your separate pages and link them here.

Please note that this is a draft. I'll be changing it from time to time, based on my experiences in teaching this course. I might not change the order here, but I've already adapted to a different order while actually teaching the course. The problem is that it is a kind of difficult to express the order in a formal manner here.

FOSS Elective 1 Syllabus:

My comments are in Italics.

Unit 1: The Overview (2 Hours)

Overview of Free/Open Source Software-- Definition of FOSS & GNU, History of GNU, Linux and the Free Software Movement and Open Source. Advantages of Free Software and Linux, FOSS usage , trends and potential, global and Indian.

All this is fine. Just don't make people mug this up and answer in the exams. Students hate it and its really not the indicator of one's knowledge. Plus, students mug up just to pass the exam and then forget it. There's a better solution. Ask them practical questions. For example, make them choose what license to use for a particular app they've written. Ask them why. Ask them why they've made it open source. Ask them why they have NOT made it open source. Yes. That's a choice. Let them have it. Same way, present the arguments from both sides about the term GNU/Linux. Let them choose on their own which term to use.. GNU/Linux or just plain Linux. Don't force a choice.

What is a Linux Distribution? Linux - the kernel. Examples. Pros and Cons of the major distros. Useful websites: TLDP, Distrowatch, Linux.com, Add your own...

Again, not to be mugged up. Keep it like in LPI. Ask questions like, You need to find this and this info. Where would you find it? These questions are not to count for much of course.

The BSDs.

They must be mentioned.

Unit 2: The GUI (3 Hours)

Essential. Why? People should know how to do daily work using FOSS.

I'd directly use the content from O'Reilly's Running Linux, 5th Edition here. Here's the list of what I'd borrow:

Chapter 3, Desktop Environments. Chapter 5, Web Browsers and Instant Messaging. Chapter 6, Electronic Mail Clients. Chapter 8, Office Suits and Personal Productivity Chapter 9, Multimedia

The chapter on Multimedia mentions kernel, ALSA etc. So its time we jumped into it. But first, there's bash.

Unit 3: The CLI (6 Hours)

File system. User/group management. Permissions. Related commands.

Logging in and out. Basic file and directory manupulation commands like cp, mv, cd, ls etc. Working with text files (cat, grep, cut, uniq, sort etc). Intro to vi(m?).

Bash fundamentals: The emacs editing mode. Startup files. Concepts about running commands and scripts like subshells, sourcing etc. Quoting (VERY IMPORTANT: Refer to this: http://floyd-n-milan.blogspot.com/2006/11/bash-quoting.html). Aliases, functios. set and shopt. Concept of variables: normal, local, environmental, positional parameters. String operators. Command substitution. Flow control with if, for, case, select, while/until. Arithmetic. Arrays.

The concept of redirection and piping (<, >, |). Standard I/O, the 3 file descriptors. Here documents and here strings.

Job control, Process handling and Singalling.

This chapter should get students acquainted with as many commands as possible.

Unit 4: Linux Concepts (10 Hours)

Kernel. Bootloaders. Init. SysVInit system. start-stop-daemon from Debian for writing init scripts. Runlevels. Service management: Manually (symlinks and all), chkconfig, update-rc.d. Getty and login.

Important files: dmesg, utmp, wtmp etc. The w commands, uname etc.

Accessing the hardware.. /dev. udev. Kernel modules. Related commands like modprobe, modinfo etc.

Common system configuration files. /proc

Syslog and log files.

ALSA. X: concepts and setting up.

Software installation: From source. Package management using RPM and DEB.

Kernel compilation and installation.

Unit 5: Networking (8 Hours)

Moderately detailed.

Basics: Setting up interfaces, managing the ARP and route tables. Setting up gateways, DNS servers etc.

Serial hardware and PPP, PPPoE.

Netfilter. NATing.

Xinetd. Service and Protocol files. RPC. ssh.

Samba and NFS, NIS: Basic setups.

Setting up Apache.

Setting up a wiki, bug tracking system and a mailing list. IRC.

Unit 6: Programming (15 Hours)

I'd have no idea about this. I just copied this from the original syllabus.

Using the GNU Compiler Collection --GNU compiler tools ; the C preprocessor (cpp), the C compiler (gcc) and the C++ compiler (g++), assembler (gas) ; Understanding build systems -- constructing make files and using make, using autoconf and autogen to automatically generate make files tailored for different development environments ; Using source code versioning and management tools -- using CVS/Subversion to manage source code revisions, patch & diff. Understanding the GNU Libc libraries and linker -- linking against object archives (.a libraries) and dynamic shared object libraries (.so libraries), generating statically linked binaries and libraries, generating dynamically linked libraries ; Using the GNU debugging tools -- gdb to debug programs, graphical debuggers like ddd, memory debugging / profiling libraries mpatrol and valgrind ; Review of common programming practicies and guidelines for GNU/Linux and FOSS.

My suggestions - Techno Freak

  • An introduction to GCC and GNU tools
  • The build process with make, autoconf, autogen
  • Using debuggers
  • Using version control

All the above accompanied by practical/working examples and some hands-on session will be enough for a beginner.

Floyd_n_milan concurs.

Unit 7: DataBase? Management Systems (6 Hours)

Forget about starting with specific DBMS. I'd rather teach SQL first and then teach the specifics for PostgreSQL or MySQL or whatever. This comes from my personal experience in learning SQL.

Basic concepts about Databases, like what they are and what SQL is.

Creating, deleting and updating databases and tables.

Querying databases. From basic SELECT statements to using WHERE, GROUP BY, JOIN etc.

First 3 normal forms.

This much is enough for basics and you don't really have to go into too many details here because the time is limited.

Unit 8: GUI Programming and Higher level languages (6 Hours)

I suppose just the inro is enough here. Hence only 6 hours allocated.

Qt Programming ; Gtk+ Programming ;

Python Programming - Introduction to scripting languages, things to note in Python, using the interactive Python shell, Data types in Python, Functions, Flow Control, Modules, introduction to OOP in Python, exploring in-built modules, using DBMS with Python ;

added by Techno Freak

Programming GUI applications with localization support.

I don't know about Units 6 and 7, but the stuff before that isn't too heavy. Can be easily learnt in the hours allocated.

The basic introduction to Python Programming, covering all the main topics excluding in depth OOPs and as an interactive session, will need minimum 2 hours - 3 hours is ideal - Techno Freak