16Jun/1014

Dependencies

by Jeff

\

Image text: The prereqs for CPSC 357, the class on package management, are CPCS 432, CPSC 357, and glibc2.5 or later.

This is a computer science joke with a possible homage to Fight Club.

The meaning here is roughly "A dependency class depends on a dependency class" as a prerequisite.

The same thing follows in the image text as 357 is required for 357.

Comments (14) Trackbacks (0)
  1. Reminds me of an old joke I heard when I was a CS student: In order to understand recursion, you must first understand recursion.

  2. what is glibc2.5?

  3. glibc is the name of some software that is currently at version 2.11. Since 2.5 isn’t released yet, its just another part of the joke

    • Actually 2.5 was released years ago (2007). Note that 2.11 is ‘two point eleven’.
      Also, isn’t the joke here actually ‘circular dependencies’, where a package depends on itself? This is a common scenario in Debian, on which Ubuntu is based(earlier comics suggest the writer of xkcd uses Ubuntu)

      • Actually, he refers to Ubuntu as “Windows Vista with a few custom themes,” that “Ubuntu 6.10 and Firefox 2.0 have left my computer a complete mess,” and that zealous autoconfig, which he mocks, “I hear this is an option in the latest Ubuntu release”

  4. I don’t think that Fight Club is anywhere near being a reference for this.

    A much closer reference would be a google search for recursion, which constantly asks “Did you mean: recursion”

    http://www.google.com/search?q=recursion

  5. Reminds me of a joke contained in the glossary of a computer science textbook.

    endless loop: see loop, endless

    loop, endless: see endless loop

  6. Other possible jokes:
    A lower level class (3xx) depends on a higher level class (4xx) as a prerequisite.
    The phrase “dependency resolution” seems to be double loaded as well. In compilation, dependency resolution refers to finding the required libraries, but one main role of package managers is to resolve the dependencies between the different packages.

  7. DESCRIPTION
    The term “libc” is commonly used as a shorthand for the “standard C library”, a library of standard functions that can be used by all C programs (and sometimes by programs in other languages). Because of some history (see below), use of the term “libc” to refer to the standard C library is somewhat ambiguous on Linux.

    glibc
    By far the most widely used C library on Linux is the GNU C Library (http://www.gnu.org/software/libc/), often referred to as glibc. This is the C library that is nowadays used in all major Linux distributions. It is also the C library whose details are documented in the relevant pages of the man-pages project (primarily in Section 3 of the manual). Documentation of glibc is also available in the glibc manual, available via the command info libc. Release 1.0 of glibc was made in September 1992. (There were earlier 0.x releases.) The next major release of glibc was 2.0, at the beginning of 1997.

    The pathname /lib/libc.so.6 (or something similar) is normally a symbolic link that points to the location of the glibc library, and executing this pathname will cause glibc to display various information about the version installed on your system.

    • The longer explanation of glibc … just in case darkside wasn’t asking about the future version name.

  8. I think there’s also a hint of a meta-joke in it as well. As I wrote to my sister this morning when she asked me for more explanation:

    It’s funny because a common goal for a compiler (which is a program that takes a higher-level computer language and translates it into low-level binary code that can run directly on the computer) is to be able to write the compiler in that language and compile itself, thus removing any dependency on other languages or compilers.

    This process is known as bootstrapping. You write a little bit of the compiler in another language so that it supports just enough of your language to be able to write the beginnings of your compiler. Then you go from there, adding new features, but being careful not to use the new features in the compiler until the compiler can compile them successfully.

    http://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf explains this issue in the service of an even deeper concept – the limits of trust and computers.

    Also, see http://en.wikipedia.org/wiki/Bootstrapping_(compilers) for a more direct discussion of bootstrapping compilers.

    • I would note that many if not most compilers do not go straight to binary but to assembly language instead which than allows another level of optimization before being converted to machine language.

      • True, and some of them even go to an intermediate level before emitting assembly. I have no compiler experience, but my vague recollection is that GCC involves a bunch of front-ends for different languages that target an intermediate form, and then a bunch of back-ends for different processors that output the intermediate form. From looking at http://en.wikipedia.org/wiki/GNU_Compiler_Collection, it appears that my vague recollection is actually simplified – there appear to be at least three different intermediate forms!

  9. I’m not sure if someone has already noted the ambiguity of the term “prereqs” (prerequisites) in the mage text.

    First, it means prerequisites for the course on package management (CPSC 357), which includes the other course CPCS 432, and CPSC 357 itself (which repeats the joke of the comic about a course that depends on itself).

    Second, “prerequisites” is also a technical term used in software package management (which this course seem to be about). Often, one software package depends on other packages to function properly. In particular, many packages on Linux (other operating systems differ) depend on a certain version of the the GNU C library (glibc).

    Mixing these two meanings of “prereqs” is the actual joke in the image text.


Leave a comment


Anti-Spam Protection by WP-SpamFree

No trackbacks yet.

Pages

Facebook

Blogroll

Categories

Meta