innfeed.conf(5)


NAME

   innfeed.conf - Configuration file for innfeed

DESCRIPTION

   The configuration file innfeed.conf in pathetc is used to control the
   innfeed(8) program.  It is a fairly free-format file that consists of
   three types of entries:  key:value, peer and group.  Comments are from
   the hash character "#" to the end of the line.

   key:value entries are a keyword and a value separated by a colon (which
   can itself be surrounded by whitespace).  For example:

       max-connections: 10

   A legal key starts with a letter and contains only letters, digits, and
   the "_" and "-" characters.  There are 5 different types of values:
   integers, floating-point numbers, characters, booleans, and strings.

   Integer and floating-point numbers are as to be expected, except that
   exponents in floating-point numbers are not supported.  A boolean value
   is either "true" or "false" (case is not significant).  A character
   value is a single-quoted character as defined by the C-language.  A
   string value is any other sequence of characters.  If the string needs
   to contain whitespace, then it must be quoted with double quotes, and
   uses the same format for embedding non-printing characters as normal
   C-language string.

   Peer entries look like:

       peer <name> {
           # body ...
       }

   The word "peer" is required.  The <name> is the same as the site name
   in INN's newsfeeds configuration file.  The body of a peer entry
   contains some number (possibly zero) of key:value entries.

   Group entries look like:

       group <name> {
           # body ...
       }

   The word "group" is required.  The <name> is any string valid as a key.
   The body of a group entry contains any number of the three types of
   entries.  So key:value pairs can be defined inside a group, and peers
   can be nested inside a group, and other groups can be nested inside a
   group.

   key:value entries that are defined outside of all peer and group
   entries are said to be at "global scope".  There are global key:value
   entries that apply to the process as a whole (for example the location
   of the backlog file directory), and there are global key:value entries
   that act as defaults for peers.  When innfeed looks for a specific
   value in a peer entry (for example, the maximum number of connections
   to set up), if the value is not defined in the peer entry, then the
   enclosing groups are examined for the entry (starting at the closest
   enclosing group).  If there are no enclosing groups, or the enclosing
   groups do not define the key:value, then the value at global scope is
   used.

   A small example could be:

       # Global value applied to all peers that have
       # no value of their own.
       max-connections: 5

       # A peer definition.  "uunet" is the name used by innd
       # in the newsfeeds configuration file.
       peer uunet {
           ip-name: usenet1.uu.net
       }

       peer vixie {
           ip-name: gw.home.vix.com
           max-connections: 10       # Override global value.
       }

       # A group of two peers which can handle more connections
       # than normal.
       group fast-sites {
           max-connections: 15

           # Another peer.  The "max-connections" value from the
           # "fast-sites" group scope is used.  The "ip-name" value
           # defaults to the peer's name.
           peer data.ramona.vix.com {
           }

           peer bb.home.vix.com {
               max-connections: 20   # He can really cook.
           }
       }

   Given the above configuration file, the defined peers would have the
   following values for the max-connections key:

       uunet                  5
       vixie                 10
       data.ramona.vix.com   15
       bb.home.vix.com       20

   innfeed ignores key:value pairs it is not interested in.  Some
   configuration file values can be set via a command-line option, in
   which case that setting overrides the settings in the file.

   Configuration files can be included in other configuration files via
   the syntax:

       $INCLUDE filename

   There is a maximum nesting depth of 10.

   For a fuller example configuration file, see the supplied innfeed.conf.

GLOBAL VALUES

   The following listing show all the keys that apply to the process as
   whole.  These are not required (compiled-in defaults are used where
   needed).

   news-spool
       This key requires a pathname value and defaults to patharticles in
       inn.conf.  It specifies where the top of the article spool is.
       This corresponds to the -a command-line option.

   input-file
       This key requires a pathname value.  It specifies the pathname
       (relative to the backlog-directory value) that should be read in
       funnel-file mode.  This corresponds to giving a filename as an
       argument on the command-line (i.e. its presence also implies that
       funnel-file mode should be used).

       The default is unset; innfeed then runs in channel or batch mode.

   pid-file
       This key requires a pathname value and defaults to innfeed.pid.  It
       specifies the pathname (relative to pathrun in inn.conf) where the
       pid of the innfeed process should be stored.  This corresponds to
       the -p command-line option.

   debug-level
       This key defines the debug level for the process.  Default is 0.  A
       non-zero number generates a lot of messages to stderr, or to the
       config-defined log-file.  This corresponds to the -d command-line
       option.

       If a file named innfeed.debug exists in the pathlog directory (as
       set in inn.conf), then debug-level is automatically set to 1.  This
       is a cheap way of avoiding continual reloading of the newsfeeds
       file when debugging.  Note that debug messages still go to log-
       file.

   debug-shrinking
       This key requires a boolean value and defaults to false (the debug
       file is allowed to grow without bound).  If set to true, this file
       is truncated when its size reaches a certain limit.  See backlog-
       limit for more details.

   initial-sleep
       This key requires a positive integer.  The default value is 2.  It
       defines the number of seconds to wait when innfeed (or a fork)
       starts, before beginning to open connections to remote hosts.

   fast-exit
       This key requires a boolean value and defaults to false.  If set to
       true, when innfeed receives a SIGTERM or SIGQUIT signal, it will
       close its listeners as soon as it can, even if it means dropping
       articles.

   use-mmap
       This key requires a boolean value and defaults to true.  When
       innfeed is given file names to send (a fairly rare use case)
       instead of storage API tokens, it specifies whether mmaping should
       be used if innfeed has been built with mmap(2) support.  If article
       data on disk is not in NNTP-ready format (CR/LF at the end of each
       line), then after mmaping, the article is read into memory and
       fixed up, so mmaping has no positive effect (and possibly some
       negative effect depending on your system), and so in such a case
       this value should be "false", which corresponds to the -M command-
       line option.

   log-file
       This key requires a pathname value and defaults to innfeed.log.  It
       specifies where any logging messages that could not be sent via
       syslog(3) should go (such as those generated when a positive value
       for debug-value is used).  This corresponds to the -l command-line
       option.

       This pathname is relative to pathlog in inn.conf.

   log-time-format
       This key requires a format string suitable for strftime(3).  It is
       used for messages sent via syslog(3) and to the status-file.
       Default value is "%a %b %d %H:%M:%S %Y".

   backlog-directory
       This key requires a pathname value and defaults to innfeed.  It
       specifies where the current innfeed process should store backlog
       files.  This corresponds to the -b command-line option.

       This pathname is relative to pathspool in inn.conf.

   backlog-highwater
       This key requires a positive integer value and defaults to 5.  It
       specifies how many articles should be kept on the backlog file
       queue before starting to write new entries to disk.

   backlog-ckpt-period
       This key requires a positive integer value and defaults to 30.  It
       specifies how many seconds elapse between checkpoints of the input
       backlog file.  Too small a number will mean frequent disk accesses;
       too large a number will mean after a crash, innfeed will re-offer
       more already-processed articles than necessary.

   backlog-newfile-period
       This key requires a positive integer value and defaults to 600.  It
       specifies how many seconds elapse before each check for externally
       generated backlog files that are to be picked up and processed.

   backlog-rotate-period
       This key requires a positive integer value and defaults to 60.  It
       specifies how many seconds elapse before innfeed checks for a
       manually created backlog file and moves the output backlog file to
       the input backlog file.

   dns-retry
       This key requires a positive integer value and defaults to 900.  It
       defines the number of seconds between attempts to re-lookup host
       information that previously failed to be resolved.

   dns-expire
       This key requires a positive integer value and defaults to 86400.
       It defines the number of seconds between refreshes of name to
       address DNS translation.  This is so long-running processes do not
       get stuck with stale data, should peer IP addresses change.

   gen-html
       This key requires a boolean value and defaults to false.  It
       specifies whether the status-file should be HTML-ified.

   status-file
       This key requires a pathname value and defaults to innfeed.status.
       An absolute pathname can be used.  It specifies the pathname
       (relative to pathhttp when gen-html is true; otherwise, pathlog as
       set in inn.conf) where the periodic status of the innfeed process
       should be stored.  This corresponds to the -S command-line option.

   connection-stats
       This key requires a boolean value and defaults to false.  If the
       value is true, then whenever the transmission statistics for a peer
       are logged, each active connection logs its own statistics.  This
       corresponds to the -z command-line option.

   host-queue-highwater
       This key requires a positive integer value and defaults to 10.  It
       defines how many articles will be held internally for a peer before
       new arrivals cause article information to be spooled to the backlog
       file.

   stats-period
       This key requires a positive integer value and defaults to 600.  It
       defines how many seconds innfeed waits between generating
       statistics on transfer rates.

   stats-reset
       This key requires a positive integer value and defaults to 43200.
       It defines how many seconds innfeed waits before resetting all
       internal transfer counters back to zero (after logging one final
       time).  This is so a innfeed process running more than a day will
       generate "final" stats that will be picked up by logfile processing
       scripts.

   initial-reconnect-time
       This key requires a positive integer value and defaults to 30.  It
       defines how many seconds to first wait before retrying to reconnect
       after a connection failure.  If the next attempt fails too, then
       the reconnect time is approximately doubled until the connection
       succeeds, or max-reconnect-time is reached.

   max-reconnect-time
       This key requires an integer value and defaults to 3600.  It
       defines the maximum number of seconds to wait between attempt to
       reconnect to a peer.  The initial value for reconnection attempts
       is defined by initial-reconnect-time, and it is doubled after each
       failure, up to this value.

   stdio-fdmax
       This key requires a non-negative integer value and defaults to 0.
       If the value is greater than zero, then whenever a network socket
       file descriptor is created and it has a value less than this, the
       file descriptor will be dup'ed to bring the value up greater than
       this.  This is to leave lower numbered file descriptors free for
       stdio.  Certain systems, Sun's in particular, require this.  SunOS
       4.1.x usually requires a value of 128 and Solaris requires a value
       of 256.  The default if this is not specified, is 0.

   Special keys for imapfeed
   The following keys are used with imapfeed to authenticate to a remote
   host.  Several parameters may be included at global scope:

   deliver-authname
       The authname is who you want to authenticate as.

   deliver-password
       This is the appropriate password for authname.

   deliver-username
       The username is who you want to "act" as, that is, who is actually
       going to be using the server.

   deliver-realm
       In this case, the "realm" is the realm in which the specified
       authname is valid.  Currently this is only needed by the DIGEST-MD5
       SASL mechanism.

   deliver-rcpt-to
       A printf(3)-style format string for creating the envelope recipient
       address.  The pattern MUST include a single string specifier which
       will be replaced with the newgroup (e.g. "bb+%s").  The default is
       "+%s".

   deliver-to-header
       An optional printf(3)-style format string for creating a To: header
       field to be prepended to the article.  The pattern MUST include a
       single string specifier which will be replaced with the newgroup
       (e.g. "post+%s@domain").  If not specified, the To: header field
       will not be prepended.

GLOBAL PEER DEFAULTS

   All the key:value pairs mentioned in this section can be specified at
   global scope.  They may also be specified inside a group or peer
   definition.  Note that when peers are added dynamically (i.e. when
   innfeed receives an article for an unspecified peer), it will add the
   peer site using the parameters specified at global scope.

   Required keys
   No keys are currently required.  They all have a default value, if not
   present in the configuration file.

   Optional keys
   The following keys are optional:

   article-timeout
       This key requires a non-negative integer value.  The default value
       is 600.  If no articles need to be sent to the peer for this many
       seconds, then the peer is considered idle and all its active
       connections are torn down.

   response-timeout
       This key requires a non-negative integer value.  The default value
       is 300.  It defines the maximum amount of time to wait for a
       response from the peer after issuing a command.

   initial-connections
       This key requires a non-negative integer value.  The default value
       is 1.  It defines the number of connections to be opened
       immediately when setting up a peer binding.  A value of 0 means no
       connections will be created until an article needs to be sent.

   max-connections
       This key requires a positive integer value.  The default value is 2
       but may be increased if needed or for large feeds.  It defines the
       maximum number of connections to run in parallel to the peer.  A
       value of 0 specifies an unlimited number of maximum connections.
       In general, use of an unlimited number of maximum connections is
       not recommended.  Do not ever set max-connections to zero with
       dynamic-method 0 set, as this will saturate peer hosts with
       connections.

   close-period
       This key requires a positive integer value and defaults to 86400.
       It is the maximum number of seconds a connection should be kept
       open.  Some NNTP servers do not deal well with connections being
       held open for long periods.

   dynamic-method
       This key requires an integer value between 0 and 3.  The default
       value is 3.  It controls how connections are opened, up to the
       maximum specified by max-connections.  In general (and
       specifically, with dynamic-method 0), a new connection is opened
       when the current number of connections is below max-connections,
       and an article is to be sent while no current connections are idle.
       Without further restraint (i.e. using dynamic-method 0), in
       practice this means that max-connections connections are
       established while articles are being sent.  Use of other dynamic-
       method settings imposes a further limit on the amount of
       connections opened below that specified by max-connections.  This
       limit is calculated in different ways, depending of the value of
       dynamic-method.

       Users should note that adding additional connections is not always
       productive -- just because opening twice as many connections
       results in a small percentage increase of articles accepted by the
       remote peer, this may be at considerable resource cost both locally
       and at the remote site, whereas the remote site might well have
       received the extra articles sent from another peer a fraction of a
       second later.  Opening large numbers of connections is considered
       antisocial.

       The meanings of the various settings are:

       0 (no method)
         Increase of connections up to max-connections is unrestrained.

       1 (maximize articles per second)
         Connections are increased (up to max-connections) and decreased
         so as to maximize the number of articles per second sent, while
         using the fewest connections to do this.

       2 (set target queue length)
         Connections are increased (up to max-connections) and decreased
         so as to keep the queue of articles to be sent within the bounds
         set by dynamic-backlog-low and dynamic-backlog-high, while using
         the minimum resources possible.  As the queue will tend to fill
         if the site is not keeping up, this method ensures that the
         maximum number of articles are offered to the peer while using
         the minimum number of connections to achieve this.

       3 (combination)
         This method uses a combination of methods 1 and 2 above.  For
         sites accepting a large percentage of articles, method 2 will be
         used to ensure these sites are offered as complete a feed as
         possible.  For sites accepting a small percentage of articles,
         method 1 is used, to minimize remote resource usage.  For
         intermediate sites, an appropriate combination is used.

   dynamic-backlog-low
       This key requires a floating-point value between 0 and 100.  It
       represents (as a percentage) the low water mark for the host queue.
       If the host queue falls below this level while using dynamic-method
       2 or 3, and if 2 or more connections are open, innfeed will attempt
       to drop connections to the host.  An Infinite Impulse Response
       (IIR) filter is applied to the value to prevent connection flap
       (see dynamic-filter).  The default value is 20.0.  This value must
       be smaller than dynamic-backlog-high.

   dynamic-backlog-high
       This key requires a floating-point value between 0 and 100.  It
       represents (as a percentage) the high water mark for the host
       queue.  If the host queue rises above this level while using
       dynamic-method 2 or 3, and if less than max-connections are open to
       the host, innfeed will attempt to open further connections to the
       host.  An Infinite Impulse Response (IIR) filter is applied to the
       value to prevent connection flap (see dynamic-filter).  The default
       value is 50.0.  This value must be larger than dynamic-backlog-low.

   dynamic-backlog-filter
       This key requires a floating-point value between 0 and 1.  It
       represents the filter coefficient used by the Infinite Impulse
       Response (IIR) filter used to implement dynamic-method 2 and 3.
       The default value of this filter is 0.7, giving a time constant of
       1/(1-0.7) articles.  Higher values will result in slower response
       to queue fullness changes; lower values in faster response.

   max-queue-size
       This key requires a positive integer value.  The default value is
       20.  It defines the maximum number of articles to process at one
       time when using streaming to transmit to a peer.  Larger numbers
       mean more memory consumed as articles usually get pulled into
       memory (see the description of use-mmap).

   streaming
       This key requires a boolean value.  Its default value is true.  It
       defines whether streaming commands are used to transmit articles to
       the peers.

   no-check-high
       This key requires a floating-point number which must be in the
       range [0.0, 100.0].  When running transmitting with the streaming
       commands, innfeed attempts an optimization called "no-CHECK mode".
       This involves not asking the peer if it wants the article, but just
       sending it.  This optimization occurs when the percentage of the
       articles the peer has accepted gets larger than this number.  If
       this value is set to 100.0, then this effectively turns off no-
       CHECK mode, as the percentage can never get above 100.0.  If this
       value is too small, then the number of articles the peer rejects
       will get bigger (and your bandwidth will be wasted).  The default
       value of 95.0 usually works pretty well.

   no-check-low
       This key requires a floating-point number which must be in the
       range [0.0, 100.0], and it must be smaller that the value for no-
       check-high.  When running in no-CHECK mode, as described above, if
       the percentage of articles the remote server accepts drops below
       this number, then the no-CHECK optimization is turned off until the
       percentage gets above the no-check-high value again.  If there is
       small difference between this and the no-check-high value (less
       than about 5.0), then innfeed may frequently go in and out of no-
       CHECK mode.  If the difference is too big, then it will make it
       harder to get out of no-CHECK mode when necessary (wasting
       bandwidth).  Keeping this to between 5.0 and 10.0 less than no-
       check-high usually works pretty well.  The default value is 90.0.

   no-check-filter
       This is a floating-point value representing the time constant, in
       articles, over which the CHECK/no-CHECK calculations are done.  The
       default value is 50.0, which will implement an Infinite Impulse
       Response (IIR) filter of time constant 50.  This roughly equates to
       making a decision about the mode over the previous 50 articles.  A
       higher number will result in a slower response to changing
       percentages of articles accepted; a lower number will result in a
       faster response.

   port-number
       This key requires a positive integer value.  It defines the TCP/IP
       port number to use when connecting to the remote.  Usually, port
       number 119 is used, which is the default value.

   force-ipv4
       This key requires a boolean value.  By default, it is set to false.
       Setting it to true is the same as setting bindaddress6 to "none"
       and removing bindaddress from "none" if it was set.

   drop-deferred
       This key requires a boolean value.  By default, it is set to false.
       When set to true, and a peer replies with code 431 or 436 (try
       again later), innfeed just drops the article and does not try to
       re-send it.  This is useful for some peers that keep on deferring
       articles for a long time to prevent innfeed from trying to offer
       the same article over and over again.

   min-queue-connection
       This key requires a boolean value.  By default, it is set to false.
       When set to true, innfeed will attempt to use a connection with the
       least queue size (or the first empty connection).  If this key is
       set to true, it is recommended that dynamic-method be set to 0.
       This allows for article propagation with the least delay.

   no-backlog
       This key requires a boolean value.  It specifies whether spooling
       should be enabled (false, the default) or disabled (true).  Note
       that when no-backlog is set, articles reported as spooled are
       actually silently discarded.

   backlog-limit
       This key requires a non-negative integer value.  If the number is 0
       (the default), then backlog files are allowed to grow without bound
       when the peer is unable to keep up with the article flow.  If this
       number is greater than 0, then it specifies the size (in bytes) the
       backlog file should get truncated to when the backlog file reaches
       a certain limit.  The limit depends on whether backlog-factor or
       backlog-limit-highwater is used.

       This parameter also applies to the debug file when debug-shrinking
       is set to true, and has the same effect on this file as the one has
       on backlog files.

   backlog-factor
       This key requires a floating-point value, which must be larger than
       1.0.  It is used in conjunction with the peer key backlog-limit.
       If backlog-limit has a value greater than zero, then when the
       backlog file gets larger than the value backlog-limit * backlog-
       factor, then the backlog file will be truncated to the size
       backlog-limit.

       For example, if backlog-limit has a value of 1000000, and backlog-
       factor has a value of 2.0, then when the backlog file gets to be
       larger than 2000000 bytes in size, it will be truncated to 1000000
       bytes.  The front portion of the file is removed, and the trimming
       happens on line boundaries, so the final size may be a bit less
       than this number.  If backlog-limit-highwater is defined too, then
       backlog-factor takes precedence.  The default value of backlog-
       factor is 1.1.

       This parameter also applies to the debug file when debug-shrinking
       is set to true, and has the same effect on this file as the one has
       on backlog files.

   backlog-limit-highwater
       This key requires a positive integer value that must be larger than
       the value for backlog-limit.  The default value is 0.

       If the size of the backlog file gets larger than this value (in
       bytes), then the backlog file will be shrunk down to the size of
       backlog-limit.  If both backlog-factor and backlog-limit-highwater
       are defined, then the value of backlog-factor is used.

       This parameter also applies to the debug file when debug-shrinking
       is set to true, and has the same effect on this file as the one has
       on backlog files.

   backlog-feed-first
       This key requires a boolean value.  By default it is set to false.
       When set to true, the backlog is fed before new files.  This is
       intended to enforce in-order delivery, so setting this to true when
       initial-connections or max-connections is more than 1 is
       inconsistent.

   bindaddress
       This key requires a string value.  It specifies which outgoing IPv4
       address innfeed should bind the local end of its connection to.  It
       must be an IPv4 address in dotted-quad format (nnn.nnn.nnn.nnn),
       "any", or "none".  If not set or set to "any", innfeed defaults to
       letting the kernel choose this address.  If set to "none", innfeed
       will not use IPv4 for outgoing connections to peers in this scope
       (i.e. it forces IPv6).

       If not set in innfeed.conf, innfeed defaults to the value of
       sourceaddress from inn.conf (which by default is unset).

   bindaddress6
       This key requires a string value.  It behaves like bindaddress
       except for outgoing IPv6 connections.  It must be in numeric IPv6
       format (note that a value containing colons must be enclosed in
       double quotes), "any", or "none".  If set to "none", innfeed will
       not use IPv6 for outgoing connections to peers in this scope.

       If not set in innfeed.conf, innfeed defaults to the value of
       sourceaddress6 from inn.conf (which by default is unset).

   username
       This key requires a string value.  If the value is defined, then
       innfeed tries to authenticate by AUTHINFO USER and this value used
       for user name.  password must also be defined, if this key is
       defined.

   password
       This key requires a string value.  The value is the password used
       for AUTHINFO PASS.  username must also be defined, if this key is
       defined.

PEER VALUES

   As previously explained, the peer definitions can contain redefinitions
   of any of the key:value pairs described in the section about global
   peer defaults above.  There is one key:value pair that is specific to a
   peer definition.

   ip-name
       This key requires a word value.  The word is the host's FQDN, or
       the dotted quad IP-address.  If this value is not specified, then
       the name of the peer in the enclosing peer block is taken to also
       be its ip-name.

RELOADING

   If innfeed gets a SIGHUP signal, then it will reread the configuration
   file.  All values at global scope except for backlog-directory can be
   changed (although note that bindaddress and bindaddress6 changes will
   only affect new connections).

   Any new peers are added and any missing peers have their connections
   closed.

   The log file is also reopened.

EXAMPLE

   For a comprehensive example, see the sample innfeed.conf distributed
   with INN and installed as a starting point.

   Here are examples of how to format values:

       eg-string:         "New\tconfig\tfile\n"
       eg-long-string:    "A long string that goes
                          over multiple lines.  The
                          newline is kept in the
                          string except when quoted
                          with a backslash \
                          as here."
       eg-simple-string:  A-no-quote-string
       eg-integer:        10
       eg-boolean:        true
       eg-char:           'a'
       eg-ctrl-g:         '\007'

HISTORY

   Written by James Brister <brister@vix.com> for InterNetNews.  Converted
   to POD by Julien Elie.

   Earlier versions of innfeed (up to 0.10.1) were shipped separately;
   innfeed is now part of INN and shares the same version number.  Please
   note that the innfeed.conf format has changed dramatically since
   version 0.9.3.

   $Id: innfeed.conf.pod 9923 2015-07-14 16:48:11Z iulius $

SEE ALSO

   inn.conf(5), innfeed(8), newsfeeds(5).





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.