title: CSCI-275-01 modified: 2017-01-29 tags: teaching, math slug: CSCI275-01 label: CSCI275-01 authors: Evan Misshula summary: Linux

Class info

Class Number CSCI 275-01
  Introduction to Linux
Instructor Evan Misshula
Credits 3
Enrollment 28
Semester Fall 2019
Room 6.64-02 NB


Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution.

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word “Linux” in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Linux distributions support dozens of programming languages. The original development tools used for building both Linux applications and operating system programs are found within the GNU toolchain, which includes the GNU Compiler Collection (GCC) and the GNU Build System. Amongst others, GCC provides compilers for Ada, C, C++, Go and Fortran. Many programming languages have a cross-platform reference implementation that supports Linux, for example PHP, Perl, Ruby, Python, Java, Go, Rust and Haskell. First released in 2003, the LLVM project provides an alternative cross-platform open-source compiler for many languages. Proprietary compilers for Linux include the Intel C++ Compiler, Sun Studio, and IBM XL C/C++ Compiler. BASIC in the form of Visual Basic is supported in such forms as Gambas, FreeBASIC, and XBasic, and in terms of terminal programming or QuickBASIC or Turbo BASIC programming in the form of QB64.

A common feature of Unix-like systems, Linux includes traditional specific-purpose programming languages targeted at scripting, text processing and system configuration and management in general. Linux distributions support shell scripts, awk, sed and make. Many programs also have an embedded programming language to support configuring or programming themselves. For example, regular expressions are supported in programs like grep and locate, the traditional Unix MTA Sendmail contains its own Turing complete scripting system, and the advanced text editor GNU Emacs is built around a general purpose Lisp interpreter.

Most distributions also include support for PHP, Perl, Ruby, Python and other dynamic languages. While not as common, Linux also supports C# (via Mono), Vala, and Scheme. Guile Scheme acts as an extension language targeting the GNU system utilities, seeking to make the conventionally small, static, compiled C programs of Unix design rapidly and dynamically extensible via an elegant, functional high-level scripting system; many GNU programs can be compiled with optional Guile bindings to this end. A number of Java Virtual Machines and development kits run on Linux, including the original Sun Microsystems JVM (HotSpot), and IBM’s J2SE RE, as well as many open-source projects like Kaffe and JikesRVM.

Location and Time


Computers in the classroom

This is a hands on class. You will be in front of a computer during class throughout the semester. Please feel free to use the computer to take notes or use the class Etherpad to discuss the course material, but do not use the computers for non-class related topics.

What is the goal of the class?

Learning objectives

Upon completing the course, you should be able to:

What will be covered?

All of the technologies have been chosen to be readily available and likely to be around for many years to come. You will gain experience with the following (do not worry if you have not heard of some or all of these). Because this is a one semester class, we will not be able to go into depth on these topics, but this should provide the foundation for you to learn more when you need or want to.

Note: this is not the order that we will cover the material and we might not get to all of these in class.

  1. IRC/Linux History
  2. Linux File System
  3. Kernels/Distros
  4. Emacs, Meetups, Git and IRC clients
  5. Introduction to Bash
  6. More Bash
  7. Compiling C rograms
  8. Linux Networking
  9. Email
  10. Configuring Services
  11. The Nix Package Manager
  12. Extending Functional Programming to Dev Ops
  13. Standing up machines automatically
  14. Linux Vulnerabilities
  15. Using Linux to exloit Windows
  16. Haskell
  17. Type Theory
  18. Monads
  19. Web Programming
  20. Concurrency

Lecture Notes


The problems will be difficult. There will be frequent quizzes at the beginning and end of class. If there is no test your grade for the day will be based on your participation and preparation will determine your grade for the day. In addition there will a midterm and final exam in case students are struggling. Be warned, this is a demanding class.

The general rule of thumb regarding college studying is, and has been for a long time, that for each class, students should spend approximately 2-3 of study time for each hour that they spend in class. Many students carry a course load of 15 credits, or approximately 15 hours of class time each week.

If students are spending considerablely more than 7.5 hours per week on the homework, they are advised to speak with the instructor and adjustments will be made. If you put int the time, there is no reason not to get an outstanding mark. Do not try to game the system by not doing the homework and making it up on the exams. That strategy has not been successful yet.


Students enrolled in this course are required to attend all lecture, recitation and laboratory sessions of the section for which they registered. (During summer session, two weeks of classes are covered each calendar week.) Excessive absences (defined above) will result in a reduction in the grade. Attendance is taken solely from roll sheets circulated at the beginning and/or end of each session. Lateness or early departure (resulting in missing no more than 15 minutes of a session) counts as 1⁄2 absence. Students missing more than 15 minutes of a session will be counted as absent. If the college is officially closed, thereby canceling all classes, an announcement will be found on 237-8000, and broadcast on AM stations WINS (1010), WOR (710), WCBS (880), WADD (1280), WMCA (570), WLIB (1190), and WFAS (1230), as well as FM stations WCBS (101.1) and WBLS (107.5). If a class will be cancelled for extraordinary circumstances, the instructor will email an announcement to the preferred email of enrolled students as soon as practicable. This has not happened in recent memory.


Students are expected to maintain active and accessible college email and Blackboard accounts. Blackboard will be used to send emails and may be used to post announcements, handouts, additional study materials, text supplements, grades, etc. Use the CUNY Portal Login page help features for a forgotten username or password, or contact DoIT, 212-237-8200 for other help. Verify your CUNY email address is correctly listed on Blackboard and keep the mailbox from filling up and refusing delivery, because you will be responsible for the contents of any email sent to that account.

When emailing instructors for this course, start the email’s subject line with the course and section number (e.g., CSCI 372-01) followed by a brief description. Include your full name in the body of every email. Emails that do not contain these descriptive details may be considered spam, and remain unopened and unanswered. Students are expected to check email regularly.


Qualified students with disabilities will be provided reasonable academic accommodations if determined appropriate by the Office of Accessibility Services (OAS), 212- 237-8031, located in room L.66.00. Prior to granting disability accommodations, verification of a student’s eligibility must be timely received from OAS by the math department chairman, Professor Douglas Salane (, and the instructor, from the OAS. It is the student’s responsibility to initiate contact with the OAS and to follow the established procedures for having the accommodation notice sent to both the course coordinator and the instructor.


Students who succeed in this course and graduate with a degree in Computer Science and Information Security may be hired by government or private agencies to analyze evidence and testify in a court of law, placing in jeopardy another person’s reputation and/or liberty. Dishonesty of any kind cannot and will not be tolerated. Students are expected to become thoroughly aware of the “John Jay College Policy on Academic Integrity” (and other college policies), available on the college’s Web site. Sanctions to the extent permitted by the policy will be imposed and any written material submitted may be transmitted by the instructor to (or equivalent service) to help analyze its originality. See the Undergraduate Bulletin for the College’s Policy on Plagiarism and Cheating, which will be strictly enforced. Plagiarism includes copying ASA or homework answers from others. You are required to do your own work to avoid severe grade and disciplinary penalties. The College subscribes to and Blackboard has a similar module called SafeAssign. Any written assignments submitted may be subject to evaluation by these or similar programs.


Although I wanted to teach this material for a long time. I have been a serial languaage learner since 2009. My path has been Basic (1979) -> Pascal (1983) -> APL(1985) -> Gauss (1988) -> Fortran (1989) -> C++ (1990)-> S+ (1991) -> Visual Basic (1992) -> Mathematica (2006) -> R (2008) -> eLisp (2009) -> Ruby (2009) -> Javascript (2009) -> Java (2009) -> Python (2011) -> Scheme (2014) -> Go (2016) -> Clojure (2016) -> Haskell (2016). How to layout this material owes a great deal to Peter Drake whose considerable open source materials I have borrowed from liberally. I hope this course will add some orthogonal contributions.