├── .github
├── FUNDING.yml
└── workflows
│ └── test.yml
├── .gitignore
├── Makefile
├── README.md
├── exec-path-from-shell.el
└── LICENSE.md
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | patreon: sanityinc
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /exec-path-from-shell.elc
2 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | EMACS ?= emacs
2 |
3 | # A space-separated list of required package names
4 | DEPS = cl-lib
5 |
6 | INIT_PACKAGES="(progn \
7 | (require 'package) \
8 | (push '(\"melpa\" . \"https://melpa.org/packages/\") package-archives) \
9 | (package-initialize) \
10 | (dolist (pkg '(PACKAGES)) \
11 | (unless (package-installed-p pkg) \
12 | (unless (assoc pkg package-archive-contents) \
13 | (package-refresh-contents)) \
14 | (package-install pkg))) \
15 | )"
16 |
17 | all: compile package-lint clean-elc
18 |
19 | package-lint:
20 | ${EMACS} -Q --eval $(subst PACKAGES,package-lint,${INIT_PACKAGES}) -batch -f package-lint-batch-and-exit exec-path-from-shell.el
21 |
22 | compile: clean-elc
23 | ${EMACS} -Q --eval $(subst PACKAGES,${DEPS},${INIT_PACKAGES}) -L . -batch -f batch-byte-compile *.el
24 |
25 | clean-elc:
26 | rm -f f.elc
27 |
28 | .PHONY: all compile clean-elc package-lint
29 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | paths-ignore:
6 | - '**.md'
7 |
8 | jobs:
9 | lint:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: purcell/setup-emacs@master
13 | with:
14 | version: 29.3
15 | - uses: actions/checkout@v2
16 | - name: Run tests
17 | run: make package-lint
18 |
19 | build:
20 | runs-on: ubuntu-latest
21 | strategy:
22 | matrix:
23 | emacs_version:
24 | - 24.4
25 | - 24.5
26 | - 25.1
27 | - 25.3
28 | - 26.1
29 | - 26.3
30 | - 27.1
31 | - 27.2
32 | - 28.1
33 | - 28.2
34 | - 29.1
35 | - snapshot
36 | steps:
37 | - uses: purcell/setup-emacs@master
38 | with:
39 | version: ${{ matrix.emacs_version }}
40 |
41 | - uses: actions/checkout@v2
42 | - name: Run tests
43 | run: make compile
44 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://melpa.org/#/exec-path-from-shell)
2 | [](http://stable.melpa.org/#/exec-path-from-shell)
3 | [](https://elpa.nongnu.org/nongnu/exec-path-from-shell.html)
4 | [](https://github.com/purcell/exec-path-from-shell/actions/workflows/test.yml)
5 |
6 |
7 | # exec-path-from-shell
8 |
9 |
10 | A GNU Emacs library to ensure environment variables inside Emacs look
11 | the same as in the user's shell.
12 |
13 | ## Motivation
14 |
15 | Ever find that a command works in your shell, but not in Emacs?
16 |
17 | This happens a lot on OS X, where an Emacs instance launched as a GUI app inherits a
18 | default minimal set of environment variables that are probably not the ones you see
19 | in a terminal window. Similarly, if you start Emacs as a daemon from `systemd` or `launchd`,
20 | it will run with a default set of environment variables.
21 |
22 | This library solves this problem by copying important environment
23 | variables from the user's shell: it works by asking your shell to print out the
24 | variables of interest, then copying them into the Emacs environment.
25 |
26 | ## Compatibility
27 |
28 | Supported shells:
29 |
30 | * `zsh`
31 | * `bash`
32 | * `tcsh`
33 | * `fish`
34 | * `nu`
35 |
36 | Note that shell variables which have not been exported as environment
37 | variables (e.g. using the "export" keyword) may not be visible to
38 | `exec-path-from-shell`.
39 |
40 | If you experience issues, enable the variable
41 | `exec-path-from-shell-debug` before runnin functions from the package:
42 | this will produce detailed logging in `*Messages*` about the shell
43 | command line and output.
44 |
45 | ## Installation
46 |
47 | Installable packages are available via MELPA: do
48 | `M-x package-install RET exec-path-from-shell RET`.
49 |
50 | Alternatively, [download][]
51 | the latest release or clone the repository, and install
52 | `exec-path-from-shell.el` with `M-x package-install-file`.
53 |
54 | ## Usage
55 |
56 | Add the following to your `init.el` (after calling `package-initialize`):
57 |
58 | ```el
59 | (when (memq window-system '(mac ns x))
60 | (exec-path-from-shell-initialize))
61 | ```
62 |
63 | This sets `$MANPATH`, `$PATH` and `exec-path` from your shell, but only
64 | when executed in a GUI frame on OS X and Linux.
65 |
66 | If you launch Emacs as a daemon from `systemd` or similar, you
67 | might like to use the following snippet:
68 |
69 | ```el
70 | (when (daemonp)
71 | (exec-path-from-shell-initialize))
72 | ```
73 |
74 | You can copy values of other environment variables by customizing
75 | `exec-path-from-shell-variables` before invoking
76 | `exec-path-from-shell-initialize`, or by calling
77 | `exec-path-from-shell-copy-env`, e.g.:
78 |
79 | ```el
80 | (exec-path-from-shell-copy-env "PYTHONPATH")
81 | ```
82 |
83 | This function may also be called interactively.
84 |
85 | The author uses the following configuration snippet before calling `exec-path-from-shell-initialize`:
86 |
87 | ```el
88 | (require 'exec-path-from-shell)
89 | (dolist (var '("SSH_AUTH_SOCK" "SSH_AGENT_PID" "GPG_AGENT_INFO" "LANG" "LC_CTYPE" "NIX_SSL_CERT_FILE" "NIX_PATH"))
90 | (add-to-list 'exec-path-from-shell-variables var))
91 | ```
92 |
93 | ### Setting up your shell startup files correctly
94 |
95 | Note that your shell will inherit Emacs's environment variables when
96 | it is run by `exec-path-from-shell` -- to avoid surprises your config
97 | files should therefore set the environment variables to their exact
98 | desired final values, i.e. don't do this:
99 |
100 | ```
101 | export PATH=/usr/local/bin:$PATH
102 | ```
103 |
104 | but instead do this:
105 |
106 | ```
107 | export PATH=/usr/local/bin:/usr/bin:/bin
108 | ```
109 |
110 | To be safe, `exec-path-from-shell` starts an interactive (and login)
111 | shell by default, but this can be much slower than necessary.
112 | Interactive shells often have fancy features enabled that are only
113 | helpful when one interacts directly with the shell, and this can
114 | frequently cause startup time to exceed 750ms. This can be avoided:
115 |
116 | * Follow best practice by setting your environment variables so that
117 | they are available to both interactive and non-interactive shells.
118 | In practical terms, for most people this means setting them in
119 | `~/.profile`, `~/.bash_profile`, `~/.zshenv` instead of `~/.bashrc`
120 | and `~/.zshrc`.
121 | * Once a non-interactive shell sets your environment variables
122 | correctly, adjust `exec-path-from-shell-arguments` appropriately
123 | (often to `nil`) before calling `exec-path-from-shell-initialize` so
124 | that it will start a non-interactive shell.
125 |
126 | To learn more about how popular shells load start-up files, read
127 | [this helpful article](https://blog.flowblok.id.au/2013-02/shell-startup-scripts.html).
128 |
129 | Making `exec-path-from-shell` faster
130 | ------------------------------------
131 |
132 | If evaluation takes more than
133 | `exec-path-from-shell-warn-duration-millis` (500ms by default) then
134 | `exec-path-from-shell` will print a warning.
135 |
136 | * Non-interactive shells start up faster. Follow the steps in the
137 | section above so that you can run your shell without `-i` and still
138 | get the right environment variable settings. When `"-i"` is then
139 | removed from `exec-path-from-shell-arguments`, this package becomes
140 | more efficient.
141 | * Invoking the shell has a non-trivial overhead in any case. Don't
142 | call `exec-path-from-shell-copy-env` repeatedly, since each
143 | invocation starts a shell. Instead, set
144 | `exec-path-from-shell-variables` to the full list of vars you want,
145 | and call `exec-path-from-shell-initialize` once.
146 |
147 | Further help
148 | ------------
149 |
150 | * `C-h f exec-path-from-shell-initialize`
151 | * `C-h f exec-path-from-shell-copy-env`
152 |
153 |
154 | [download]: https://github.com/purcell/exec-path-from-shell/tags
155 |
156 |
157 |
158 |
159 | [💝 Support this project and my other Open Source work via Patreon](https://www.patreon.com/sanityinc)
160 |
161 | [💼 LinkedIn profile](https://uk.linkedin.com/in/stevepurcell)
162 |
163 | [✍ sanityinc.com](http://www.sanityinc.com/)
164 |
--------------------------------------------------------------------------------
/exec-path-from-shell.el:
--------------------------------------------------------------------------------
1 | ;;; exec-path-from-shell.el --- Get environment variables such as $PATH from the shell -*- lexical-binding: t -*-
2 |
3 | ;; Copyright (C) 2012-2014 Steve Purcell
4 |
5 | ;; Author: Steve Purcell
6 | ;; Keywords: unix, environment
7 | ;; URL: https://github.com/purcell/exec-path-from-shell
8 | ;; Package-Version: 2.2
9 | ;; Package-Requires: ((emacs "24.4"))
10 |
11 | ;; This file is not part of GNU Emacs.
12 |
13 | ;; This file is free software: you can redistribute it and/or modify
14 | ;; it under the terms of the GNU General Public License as published by
15 | ;; the Free Software Foundation, either version 3 of the License, or
16 | ;; (at your option) any later version.
17 |
18 | ;; This file is distributed in the hope that it will be useful,
19 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 | ;; GNU General Public License for more details.
22 |
23 | ;; You should have received a copy of the GNU General Public License
24 | ;; along with this file. If not, see .
25 |
26 | ;;; Commentary:
27 |
28 | ;; On OS X (and perhaps elsewhere) the $PATH environment variable and
29 | ;; `exec-path' used by a windowed Emacs instance will usually be the
30 | ;; system-wide default path, rather than that seen in a terminal
31 | ;; window.
32 |
33 | ;; This library allows the user to set Emacs' `exec-path' and $PATH
34 | ;; from the shell path, so that `shell-command', `compile' and the
35 | ;; like work as expected.
36 |
37 | ;; It also allows other environment variables to be retrieved from the
38 | ;; shell, so that Emacs will see the same values you get in a terminal.
39 |
40 | ;; If you use a non-POSIX-standard shell like "tcsh" or "fish", your
41 | ;; shell will be asked to execute "sh" as a subshell in order to print
42 | ;; out the variables in a format which can be reliably parsed. "sh"
43 | ;; must be a POSIX-compliant shell in this case.
44 |
45 | ;; Note that shell variables which have not been exported as
46 | ;; environment variables (e.g. using the "export" keyword) may not be
47 | ;; visible to `exec-path-from-shell'.
48 |
49 | ;; Installation:
50 |
51 | ;; ELPA packages are available on Marmalade and MELPA. Alternatively,
52 | ;; place this file on a directory in your `load-path', and explicitly
53 | ;; require it.
54 |
55 | ;; Usage:
56 | ;;
57 | ;; (require 'exec-path-from-shell) ;; if not using the ELPA package
58 | ;; (exec-path-from-shell-initialize)
59 | ;;
60 | ;; Customize `exec-path-from-shell-variables' to modify the list of
61 | ;; variables imported.
62 | ;;
63 | ;; If you use your Emacs config on other platforms, you can instead
64 | ;; make initialization conditional as follows:
65 | ;;
66 | ;; (when (memq window-system '(mac ns))
67 | ;; (exec-path-from-shell-initialize))
68 | ;;
69 | ;; Alternatively, you can use `exec-path-from-shell-copy-envs' or
70 | ;; `exec-path-from-shell-copy-env' directly, e.g.
71 | ;;
72 | ;; (exec-path-from-shell-copy-env "PYTHONPATH")
73 |
74 | ;;; Code:
75 |
76 | ;; Satisfy the byte compiler
77 | (eval-when-compile (require 'eshell))
78 | (require 'cl-lib)
79 | (require 'json)
80 |
81 | (defgroup exec-path-from-shell nil
82 | "Make Emacs use shell-defined values for $PATH etc."
83 | :prefix "exec-path-from-shell-"
84 | :group 'environment)
85 |
86 | (defcustom exec-path-from-shell-variables
87 | '("PATH" "MANPATH")
88 | "List of environment variables which are copied from the shell."
89 | :type '(repeat (string :tag "Environment variable"))
90 | :group 'exec-path-from-shell)
91 |
92 | (defcustom exec-path-from-shell-warn-duration-millis 500
93 | "Print a warning if shell execution takes longer than this many milliseconds."
94 | :type 'integer)
95 |
96 | (defcustom exec-path-from-shell-shell-name nil
97 | "If non-nil, use this shell executable.
98 | Otherwise, use either `shell-file-name' (if set), or the value of
99 | the SHELL environment variable."
100 | :type '(choice
101 | (file :tag "Shell executable")
102 | (const :tag "Use `shell-file-name' or $SHELL" nil))
103 | :group 'exec-path-from-shell)
104 |
105 | (defvar exec-path-from-shell-debug nil
106 | "Display debug info when non-nil.")
107 |
108 | (defun exec-path-from-shell--double-quote (s)
109 | "Double-quote S, escaping any double-quotes already contained in it."
110 | (concat "\"" (replace-regexp-in-string "\"" "\\\\\"" s) "\""))
111 |
112 | (defun exec-path-from-shell--shell ()
113 | "Return the shell to use.
114 | See documentation for `exec-path-from-shell-shell-name'."
115 | (or
116 | exec-path-from-shell-shell-name
117 | shell-file-name
118 | (getenv "SHELL")
119 | (error "SHELL environment variable is unset")))
120 |
121 | (defcustom exec-path-from-shell-arguments
122 | (let ((shell (exec-path-from-shell--shell)))
123 | (if (string-match-p "t?csh$" shell)
124 | (list "-d")
125 | (if (string-match-p "fish" shell)
126 | (list "-l")
127 | (list "-l" "-i"))))
128 | "Additional arguments to pass to the shell.
129 |
130 | The default value denotes an interactive login shell."
131 | :type '(repeat (string :tag "Shell argument"))
132 | :group 'exec-path-from-shell)
133 |
134 | (defun exec-path-from-shell--debug (msg &rest args)
135 | "Print MSG and ARGS like `message', but only if debug output is enabled."
136 | (when exec-path-from-shell-debug
137 | (apply 'message msg args)))
138 |
139 | (defun exec-path-from-shell--nushell-p (shell)
140 | "Return non-nil if SHELL is nu."
141 | (string-match-p "nu$" shell))
142 |
143 | (defun exec-path-from-shell--standard-shell-p (shell)
144 | "Return non-nil iff SHELL supports the standard ${VAR-default} syntax."
145 | (not (string-match-p "\\(fish\\|nu\\|t?csh\\)$" shell)))
146 |
147 | (defmacro exec-path-from-shell--warn-duration (&rest body)
148 | "Evaluate BODY and warn if execution duration exceeds a time limit.
149 | The limit is given by `exec-path-from-shell-warn-duration-millis'."
150 | (let ((start-time (cl-gensym))
151 | (duration-millis (cl-gensym)))
152 | `(let ((,start-time (current-time)))
153 | (prog1
154 | (progn ,@body)
155 | (let ((,duration-millis (* 1000.0 (float-time (time-subtract (current-time) ,start-time)))))
156 | (if (> ,duration-millis exec-path-from-shell-warn-duration-millis)
157 | (message "Warning: exec-path-from-shell execution took %dms. See the README for tips on reducing this." ,duration-millis)
158 | (exec-path-from-shell--debug "Shell execution took %dms" ,duration-millis)))))))
159 |
160 | (defun exec-path-from-shell-printf (str &optional args)
161 | "Return the result of printing STR in the user's shell.
162 |
163 | Executes the shell as interactive login shell.
164 |
165 | STR is inserted literally in a single-quoted argument to printf,
166 | and may therefore contain backslashed escape sequences understood
167 | by printf.
168 |
169 | ARGS is an optional list of args which will be inserted by printf
170 | in place of any % placeholders in STR. ARGS are not automatically
171 | shell-escaped, so they may contain $ etc."
172 | (let* ((printf-bin (or (executable-find "printf") "printf"))
173 | (printf-command
174 | (concat (shell-quote-argument printf-bin)
175 | " '__RESULT\\000" str "\\000__RESULT' "
176 | (mapconcat #'exec-path-from-shell--double-quote args " ")))
177 | (shell (exec-path-from-shell--shell))
178 | (shell-args (append exec-path-from-shell-arguments
179 | (list "-c"
180 | (if (exec-path-from-shell--standard-shell-p shell)
181 | printf-command
182 | (concat "sh -c " (shell-quote-argument printf-command)))))))
183 | (with-temp-buffer
184 | (exec-path-from-shell--debug "Invoking shell %s with args %S" shell shell-args)
185 | (let ((exit-code (exec-path-from-shell--warn-duration
186 | (apply #'call-process shell nil t nil shell-args))))
187 | (exec-path-from-shell--debug "Shell printed: %S" (buffer-string))
188 | (unless (zerop exit-code)
189 | (error "Non-zero exit code from shell %s invoked with args %S. Output was:\n%S"
190 | shell shell-args (buffer-string))))
191 | (goto-char (point-min))
192 | (if (re-search-forward "__RESULT\0\\(.*\\)\0__RESULT" nil t)
193 | (match-string 1)
194 | (error "Expected printf output from shell, but got: %S" (buffer-string))))))
195 |
196 | (defun exec-path-from-shell-getenvs--nushell (names)
197 | "Use nushell to get the value of env vars with the given NAMES.
198 |
199 | Execute the shell according to `exec-path-from-shell-arguments'.
200 | The result is a list of (NAME . VALUE) pairs.
201 |
202 | Nushell sometimes produces output like e.g. flag deprecation warnings.
203 | These messages are written to an error buffer (*exec-path-from-shell:
204 | nushell errors*); unless Nushell produces a non-zero exit code, this
205 | buffer is left undisplayed."
206 | (let* ((shell (exec-path-from-shell--shell))
207 | (expr (format "[ %s ] | to json"
208 | (string-join
209 | (mapcar (lambda (name)
210 | (format "$env.%s?" (exec-path-from-shell--double-quote name)))
211 | names)
212 | ", ")))
213 | (shell-args (append exec-path-from-shell-arguments (list "-c" expr)))
214 | (err-buff-name "*exec-path-from-shell: nushell errors*")
215 | (err-file (make-temp-file err-buff-name)))
216 | (with-temp-buffer
217 | (when (get-buffer err-buff-name) (kill-buffer err-buff-name))
218 | (exec-path-from-shell--debug "Invoking shell %s with args %S" shell shell-args)
219 | (let ((exit-code (exec-path-from-shell--warn-duration
220 | (apply #'call-process shell nil `(t ,err-file) nil shell-args)))
221 | (err-buff (generate-new-buffer err-buff-name)))
222 | (exec-path-from-shell--debug "Shell printed: %S" (buffer-string))
223 | (with-current-buffer err-buff (insert-file-contents err-file))
224 | (unless (zerop exit-code)
225 | (error "Non-zero exit code from shell %s invoked with args %S. Output was:\n%S"
226 | shell shell-args (buffer-string))
227 | (display-buffer err-buff)))
228 | (goto-char (point-min))
229 | (let ((json-array-type 'list)
230 | (json-null :null))
231 | (let ((values (json-read-array))
232 | result)
233 | (while values
234 | (let ((value (car values)))
235 | (push (cons (car names)
236 | (unless (eq :null value)
237 | (if (listp value)
238 | (string-join value path-separator)
239 | value)))
240 | result))
241 | (setq values (cdr values)
242 | names (cdr names)))
243 | result)))))
244 |
245 | (defun exec-path-from-shell-getenvs (names)
246 | "Get the environment variables with NAMES from the user's shell.
247 |
248 | Execute the shell according to `exec-path-from-shell-arguments'.
249 | The result is a list of (NAME . VALUE) pairs."
250 | (when (file-remote-p default-directory)
251 | (error "You cannot run exec-path-from-shell from a remote buffer (Tramp, etc.)"))
252 | (if (exec-path-from-shell--nushell-p (exec-path-from-shell--shell))
253 | (exec-path-from-shell-getenvs--nushell names)
254 | (let* ((random-default (md5 (format "%s%s%s" (emacs-pid) (random) (current-time))))
255 | (dollar-names (mapcar (lambda (n) (format "${%s-%s}" n random-default)) names))
256 | (values (split-string (exec-path-from-shell-printf
257 | (mapconcat #'identity (make-list (length names) "%s") "\\000")
258 | dollar-names) "\0")))
259 | (let (result)
260 | (while names
261 | (prog1
262 | (let ((value (car values)))
263 | (push (cons (car names)
264 | (unless (string-equal random-default value)
265 | value))
266 | result))
267 | (setq values (cdr values)
268 | names (cdr names))))
269 | result))))
270 |
271 | (defun exec-path-from-shell-getenv (name)
272 | "Get the environment variable NAME from the user's shell.
273 |
274 | Execute the shell as interactive login shell, have it output the
275 | variable of NAME and return this output as string."
276 | (cdr (assoc name (exec-path-from-shell-getenvs (list name)))))
277 |
278 | (defun exec-path-from-shell-setenv (name value)
279 | "Set the value of environment var NAME to VALUE.
280 | Additionally, if NAME is \"PATH\" then also update the
281 | variables `exec-path' and `eshell-path-env'."
282 | (setenv name value)
283 | (when (string-equal "PATH" name)
284 | (setq exec-path (append (parse-colon-path value) (list exec-directory)))
285 | ;; `eshell-path-env' is a buffer local variable, so change its default
286 | ;; value.
287 | (setq-default eshell-path-env value)))
288 |
289 | ;;;###autoload
290 | (defun exec-path-from-shell-copy-envs (names)
291 | "Set the environment variables with NAMES from the user's shell.
292 |
293 | As a special case, if the variable is $PATH, then the variables
294 | `exec-path' and `eshell-path-env' are also set appropriately.
295 | The result is an alist, as described by
296 | `exec-path-from-shell-getenvs'."
297 | (let ((pairs (exec-path-from-shell-getenvs names)))
298 | (mapc (lambda (pair)
299 | (exec-path-from-shell-setenv (car pair) (cdr pair)))
300 | pairs)))
301 |
302 | ;;;###autoload
303 | (defun exec-path-from-shell-copy-env (name)
304 | "Set the environment variable $NAME from the user's shell.
305 |
306 | As a special case, if the variable is $PATH, then the variables
307 | `exec-path' and `eshell-path-env' are also set appropriately.
308 | Return the value of the environment variable."
309 | (interactive "sCopy value of which environment variable from shell? ")
310 | (cdar (exec-path-from-shell-copy-envs (list name))))
311 |
312 | ;;;###autoload
313 | (defun exec-path-from-shell-initialize ()
314 | "Initialize environment from the user's shell.
315 |
316 | The values of all the environment variables named in
317 | `exec-path-from-shell-variables' are set from the corresponding
318 | values used in the user's shell."
319 | (interactive)
320 | (exec-path-from-shell-copy-envs exec-path-from-shell-variables))
321 |
322 |
323 | (provide 'exec-path-from-shell)
324 |
325 | ;; Local Variables:
326 | ;; coding: utf-8
327 | ;; indent-tabs-mode: nil
328 | ;; require-final-newline: t
329 | ;; checkdoc-minor-mode: t
330 | ;; End:
331 |
332 | ;;; exec-path-from-shell.el ends here
333 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | ==========================
3 |
4 | Version 3, 29 June 2007
5 |
6 | Copyright © 2007 Free Software Foundation, Inc. <>
7 |
8 | Everyone is permitted to copy and distribute verbatim copies of this license
9 | document, but changing it is not allowed.
10 |
11 | ## Preamble
12 |
13 | The GNU General Public License is a free, copyleft license for software and other
14 | kinds of works.
15 |
16 | The licenses for most software and other practical works are designed to take away
17 | your freedom to share and change the works. By contrast, the GNU General Public
18 | License is intended to guarantee your freedom to share and change all versions of a
19 | program--to make sure it remains free software for all its users. We, the Free
20 | Software Foundation, use the GNU General Public License for most of our software; it
21 | applies also to any other work released this way by its authors. You can apply it to
22 | your programs, too.
23 |
24 | When we speak of free software, we are referring to freedom, not price. Our General
25 | Public Licenses are designed to make sure that you have the freedom to distribute
26 | copies of free software (and charge for them if you wish), that you receive source
27 | code or can get it if you want it, that you can change the software or use pieces of
28 | it in new free programs, and that you know you can do these things.
29 |
30 | To protect your rights, we need to prevent others from denying you these rights or
31 | asking you to surrender the rights. Therefore, you have certain responsibilities if
32 | you distribute copies of the software, or if you modify it: responsibilities to
33 | respect the freedom of others.
34 |
35 | For example, if you distribute copies of such a program, whether gratis or for a fee,
36 | you must pass on to the recipients the same freedoms that you received. You must make
37 | sure that they, too, receive or can get the source code. And you must show them these
38 | terms so they know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps: (1) assert
41 | copyright on the software, and (2) offer you this License giving you legal permission
42 | to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains that there is
45 | no warranty for this free software. For both users' and authors' sake, the GPL
46 | requires that modified versions be marked as changed, so that their problems will not
47 | be attributed erroneously to authors of previous versions.
48 |
49 | Some devices are designed to deny users access to install or run modified versions of
50 | the software inside them, although the manufacturer can do so. This is fundamentally
51 | incompatible with the aim of protecting users' freedom to change the software. The
52 | systematic pattern of such abuse occurs in the area of products for individuals to
53 | use, which is precisely where it is most unacceptable. Therefore, we have designed
54 | this version of the GPL to prohibit the practice for those products. If such problems
55 | arise substantially in other domains, we stand ready to extend this provision to
56 | those domains in future versions of the GPL, as needed to protect the freedom of
57 | users.
58 |
59 | Finally, every program is threatened constantly by software patents. States should
60 | not allow patents to restrict development and use of software on general-purpose
61 | computers, but in those that do, we wish to avoid the special danger that patents
62 | applied to a free program could make it effectively proprietary. To prevent this, the
63 | GPL assures that patents cannot be used to render the program non-free.
64 |
65 | The precise terms and conditions for copying, distribution and modification follow.
66 |
67 | ## TERMS AND CONDITIONS
68 |
69 | ### 0. Definitions.
70 |
71 | “This License” refers to version 3 of the GNU General Public License.
72 |
73 | “Copyright” also means copyright-like laws that apply to other kinds of
74 | works, such as semiconductor masks.
75 |
76 | “The Program” refers to any copyrightable work licensed under this
77 | License. Each licensee is addressed as “you”. “Licensees” and
78 | “recipients” may be individuals or organizations.
79 |
80 | To “modify” a work means to copy from or adapt all or part of the work in
81 | a fashion requiring copyright permission, other than the making of an exact copy. The
82 | resulting work is called a “modified version” of the earlier work or a
83 | work “based on” the earlier work.
84 |
85 | A “covered work” means either the unmodified Program or a work based on
86 | the Program.
87 |
88 | To “propagate” a work means to do anything with it that, without
89 | permission, would make you directly or secondarily liable for infringement under
90 | applicable copyright law, except executing it on a computer or modifying a private
91 | copy. Propagation includes copying, distribution (with or without modification),
92 | making available to the public, and in some countries other activities as well.
93 |
94 | To “convey” a work means any kind of propagation that enables other
95 | parties to make or receive copies. Mere interaction with a user through a computer
96 | network, with no transfer of a copy, is not conveying.
97 |
98 | An interactive user interface displays “Appropriate Legal Notices” to the
99 | extent that it includes a convenient and prominently visible feature that (1)
100 | displays an appropriate copyright notice, and (2) tells the user that there is no
101 | warranty for the work (except to the extent that warranties are provided), that
102 | licensees may convey the work under this License, and how to view a copy of this
103 | License. If the interface presents a list of user commands or options, such as a
104 | menu, a prominent item in the list meets this criterion.
105 |
106 | ### 1. Source Code.
107 |
108 | The “source code” for a work means the preferred form of the work for
109 | making modifications to it. “Object code” means any non-source form of a
110 | work.
111 |
112 | A “Standard Interface” means an interface that either is an official
113 | standard defined by a recognized standards body, or, in the case of interfaces
114 | specified for a particular programming language, one that is widely used among
115 | developers working in that language.
116 |
117 | The “System Libraries” of an executable work include anything, other than
118 | the work as a whole, that (a) is included in the normal form of packaging a Major
119 | Component, but which is not part of that Major Component, and (b) serves only to
120 | enable use of the work with that Major Component, or to implement a Standard
121 | Interface for which an implementation is available to the public in source code form.
122 | A “Major Component”, in this context, means a major essential component
123 | (kernel, window system, and so on) of the specific operating system (if any) on which
124 | the executable work runs, or a compiler used to produce the work, or an object code
125 | interpreter used to run it.
126 |
127 | The “Corresponding Source” for a work in object code form means all the
128 | source code needed to generate, install, and (for an executable work) run the object
129 | code and to modify the work, including scripts to control those activities. However,
130 | it does not include the work's System Libraries, or general-purpose tools or
131 | generally available free programs which are used unmodified in performing those
132 | activities but which are not part of the work. For example, Corresponding Source
133 | includes interface definition files associated with source files for the work, and
134 | the source code for shared libraries and dynamically linked subprograms that the work
135 | is specifically designed to require, such as by intimate data communication or
136 | control flow between those subprograms and other parts of the work.
137 |
138 | The Corresponding Source need not include anything that users can regenerate
139 | automatically from other parts of the Corresponding Source.
140 |
141 | The Corresponding Source for a work in source code form is that same work.
142 |
143 | ### 2. Basic Permissions.
144 |
145 | All rights granted under this License are granted for the term of copyright on the
146 | Program, and are irrevocable provided the stated conditions are met. This License
147 | explicitly affirms your unlimited permission to run the unmodified Program. The
148 | output from running a covered work is covered by this License only if the output,
149 | given its content, constitutes a covered work. This License acknowledges your rights
150 | of fair use or other equivalent, as provided by copyright law.
151 |
152 | You may make, run and propagate covered works that you do not convey, without
153 | conditions so long as your license otherwise remains in force. You may convey covered
154 | works to others for the sole purpose of having them make modifications exclusively
155 | for you, or provide you with facilities for running those works, provided that you
156 | comply with the terms of this License in conveying all material for which you do not
157 | control copyright. Those thus making or running the covered works for you must do so
158 | exclusively on your behalf, under your direction and control, on terms that prohibit
159 | them from making any copies of your copyrighted material outside their relationship
160 | with you.
161 |
162 | Conveying under any other circumstances is permitted solely under the conditions
163 | stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
164 |
165 | ### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
166 |
167 | No covered work shall be deemed part of an effective technological measure under any
168 | applicable law fulfilling obligations under article 11 of the WIPO copyright treaty
169 | adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention
170 | of such measures.
171 |
172 | When you convey a covered work, you waive any legal power to forbid circumvention of
173 | technological measures to the extent such circumvention is effected by exercising
174 | rights under this License with respect to the covered work, and you disclaim any
175 | intention to limit operation or modification of the work as a means of enforcing,
176 | against the work's users, your or third parties' legal rights to forbid circumvention
177 | of technological measures.
178 |
179 | ### 4. Conveying Verbatim Copies.
180 |
181 | You may convey verbatim copies of the Program's source code as you receive it, in any
182 | medium, provided that you conspicuously and appropriately publish on each copy an
183 | appropriate copyright notice; keep intact all notices stating that this License and
184 | any non-permissive terms added in accord with section 7 apply to the code; keep
185 | intact all notices of the absence of any warranty; and give all recipients a copy of
186 | this License along with the Program.
187 |
188 | You may charge any price or no price for each copy that you convey, and you may offer
189 | support or warranty protection for a fee.
190 |
191 | ### 5. Conveying Modified Source Versions.
192 |
193 | You may convey a work based on the Program, or the modifications to produce it from
194 | the Program, in the form of source code under the terms of section 4, provided that
195 | you also meet all of these conditions:
196 |
197 | * **a)** The work must carry prominent notices stating that you modified it, and giving a
198 | relevant date.
199 | * **b)** The work must carry prominent notices stating that it is released under this
200 | License and any conditions added under section 7. This requirement modifies the
201 | requirement in section 4 to “keep intact all notices”.
202 | * **c)** You must license the entire work, as a whole, under this License to anyone who
203 | comes into possession of a copy. This License will therefore apply, along with any
204 | applicable section 7 additional terms, to the whole of the work, and all its parts,
205 | regardless of how they are packaged. This License gives no permission to license the
206 | work in any other way, but it does not invalidate such permission if you have
207 | separately received it.
208 | * **d)** If the work has interactive user interfaces, each must display Appropriate Legal
209 | Notices; however, if the Program has interactive interfaces that do not display
210 | Appropriate Legal Notices, your work need not make them do so.
211 |
212 | A compilation of a covered work with other separate and independent works, which are
213 | not by their nature extensions of the covered work, and which are not combined with
214 | it such as to form a larger program, in or on a volume of a storage or distribution
215 | medium, is called an “aggregate” if the compilation and its resulting
216 | copyright are not used to limit the access or legal rights of the compilation's users
217 | beyond what the individual works permit. Inclusion of a covered work in an aggregate
218 | does not cause this License to apply to the other parts of the aggregate.
219 |
220 | ### 6. Conveying Non-Source Forms.
221 |
222 | You may convey a covered work in object code form under the terms of sections 4 and
223 | 5, provided that you also convey the machine-readable Corresponding Source under the
224 | terms of this License, in one of these ways:
225 |
226 | * **a)** Convey the object code in, or embodied in, a physical product (including a
227 | physical distribution medium), accompanied by the Corresponding Source fixed on a
228 | durable physical medium customarily used for software interchange.
229 | * **b)** Convey the object code in, or embodied in, a physical product (including a
230 | physical distribution medium), accompanied by a written offer, valid for at least
231 | three years and valid for as long as you offer spare parts or customer support for
232 | that product model, to give anyone who possesses the object code either (1) a copy of
233 | the Corresponding Source for all the software in the product that is covered by this
234 | License, on a durable physical medium customarily used for software interchange, for
235 | a price no more than your reasonable cost of physically performing this conveying of
236 | source, or (2) access to copy the Corresponding Source from a network server at no
237 | charge.
238 | * **c)** Convey individual copies of the object code with a copy of the written offer to
239 | provide the Corresponding Source. This alternative is allowed only occasionally and
240 | noncommercially, and only if you received the object code with such an offer, in
241 | accord with subsection 6b.
242 | * **d)** Convey the object code by offering access from a designated place (gratis or for
243 | a charge), and offer equivalent access to the Corresponding Source in the same way
244 | through the same place at no further charge. You need not require recipients to copy
245 | the Corresponding Source along with the object code. If the place to copy the object
246 | code is a network server, the Corresponding Source may be on a different server
247 | (operated by you or a third party) that supports equivalent copying facilities,
248 | provided you maintain clear directions next to the object code saying where to find
249 | the Corresponding Source. Regardless of what server hosts the Corresponding Source,
250 | you remain obligated to ensure that it is available for as long as needed to satisfy
251 | these requirements.
252 | * **e)** Convey the object code using peer-to-peer transmission, provided you inform
253 | other peers where the object code and Corresponding Source of the work are being
254 | offered to the general public at no charge under subsection 6d.
255 |
256 | A separable portion of the object code, whose source code is excluded from the
257 | Corresponding Source as a System Library, need not be included in conveying the
258 | object code work.
259 |
260 | A “User Product” is either (1) a “consumer product”, which
261 | means any tangible personal property which is normally used for personal, family, or
262 | household purposes, or (2) anything designed or sold for incorporation into a
263 | dwelling. In determining whether a product is a consumer product, doubtful cases
264 | shall be resolved in favor of coverage. For a particular product received by a
265 | particular user, “normally used” refers to a typical or common use of
266 | that class of product, regardless of the status of the particular user or of the way
267 | in which the particular user actually uses, or expects or is expected to use, the
268 | product. A product is a consumer product regardless of whether the product has
269 | substantial commercial, industrial or non-consumer uses, unless such uses represent
270 | the only significant mode of use of the product.
271 |
272 | “Installation Information” for a User Product means any methods,
273 | procedures, authorization keys, or other information required to install and execute
274 | modified versions of a covered work in that User Product from a modified version of
275 | its Corresponding Source. The information must suffice to ensure that the continued
276 | functioning of the modified object code is in no case prevented or interfered with
277 | solely because modification has been made.
278 |
279 | If you convey an object code work under this section in, or with, or specifically for
280 | use in, a User Product, and the conveying occurs as part of a transaction in which
281 | the right of possession and use of the User Product is transferred to the recipient
282 | in perpetuity or for a fixed term (regardless of how the transaction is
283 | characterized), the Corresponding Source conveyed under this section must be
284 | accompanied by the Installation Information. But this requirement does not apply if
285 | neither you nor any third party retains the ability to install modified object code
286 | on the User Product (for example, the work has been installed in ROM).
287 |
288 | The requirement to provide Installation Information does not include a requirement to
289 | continue to provide support service, warranty, or updates for a work that has been
290 | modified or installed by the recipient, or for the User Product in which it has been
291 | modified or installed. Access to a network may be denied when the modification itself
292 | materially and adversely affects the operation of the network or violates the rules
293 | and protocols for communication across the network.
294 |
295 | Corresponding Source conveyed, and Installation Information provided, in accord with
296 | this section must be in a format that is publicly documented (and with an
297 | implementation available to the public in source code form), and must require no
298 | special password or key for unpacking, reading or copying.
299 |
300 | ### 7. Additional Terms.
301 |
302 | “Additional permissions” are terms that supplement the terms of this
303 | License by making exceptions from one or more of its conditions. Additional
304 | permissions that are applicable to the entire Program shall be treated as though they
305 | were included in this License, to the extent that they are valid under applicable
306 | law. If additional permissions apply only to part of the Program, that part may be
307 | used separately under those permissions, but the entire Program remains governed by
308 | this License without regard to the additional permissions.
309 |
310 | When you convey a copy of a covered work, you may at your option remove any
311 | additional permissions from that copy, or from any part of it. (Additional
312 | permissions may be written to require their own removal in certain cases when you
313 | modify the work.) You may place additional permissions on material, added by you to a
314 | covered work, for which you have or can give appropriate copyright permission.
315 |
316 | Notwithstanding any other provision of this License, for material you add to a
317 | covered work, you may (if authorized by the copyright holders of that material)
318 | supplement the terms of this License with terms:
319 |
320 | * **a)** Disclaiming warranty or limiting liability differently from the terms of
321 | sections 15 and 16 of this License; or
322 | * **b)** Requiring preservation of specified reasonable legal notices or author
323 | attributions in that material or in the Appropriate Legal Notices displayed by works
324 | containing it; or
325 | * **c)** Prohibiting misrepresentation of the origin of that material, or requiring that
326 | modified versions of such material be marked in reasonable ways as different from the
327 | original version; or
328 | * **d)** Limiting the use for publicity purposes of names of licensors or authors of the
329 | material; or
330 | * **e)** Declining to grant rights under trademark law for use of some trade names,
331 | trademarks, or service marks; or
332 | * **f)** Requiring indemnification of licensors and authors of that material by anyone
333 | who conveys the material (or modified versions of it) with contractual assumptions of
334 | liability to the recipient, for any liability that these contractual assumptions
335 | directly impose on those licensors and authors.
336 |
337 | All other non-permissive additional terms are considered “further
338 | restrictions” within the meaning of section 10. If the Program as you received
339 | it, or any part of it, contains a notice stating that it is governed by this License
340 | along with a term that is a further restriction, you may remove that term. If a
341 | license document contains a further restriction but permits relicensing or conveying
342 | under this License, you may add to a covered work material governed by the terms of
343 | that license document, provided that the further restriction does not survive such
344 | relicensing or conveying.
345 |
346 | If you add terms to a covered work in accord with this section, you must place, in
347 | the relevant source files, a statement of the additional terms that apply to those
348 | files, or a notice indicating where to find the applicable terms.
349 |
350 | Additional terms, permissive or non-permissive, may be stated in the form of a
351 | separately written license, or stated as exceptions; the above requirements apply
352 | either way.
353 |
354 | ### 8. Termination.
355 |
356 | You may not propagate or modify a covered work except as expressly provided under
357 | this License. Any attempt otherwise to propagate or modify it is void, and will
358 | automatically terminate your rights under this License (including any patent licenses
359 | granted under the third paragraph of section 11).
360 |
361 | However, if you cease all violation of this License, then your license from a
362 | particular copyright holder is reinstated (a) provisionally, unless and until the
363 | copyright holder explicitly and finally terminates your license, and (b) permanently,
364 | if the copyright holder fails to notify you of the violation by some reasonable means
365 | prior to 60 days after the cessation.
366 |
367 | Moreover, your license from a particular copyright holder is reinstated permanently
368 | if the copyright holder notifies you of the violation by some reasonable means, this
369 | is the first time you have received notice of violation of this License (for any
370 | work) from that copyright holder, and you cure the violation prior to 30 days after
371 | your receipt of the notice.
372 |
373 | Termination of your rights under this section does not terminate the licenses of
374 | parties who have received copies or rights from you under this License. If your
375 | rights have been terminated and not permanently reinstated, you do not qualify to
376 | receive new licenses for the same material under section 10.
377 |
378 | ### 9. Acceptance Not Required for Having Copies.
379 |
380 | You are not required to accept this License in order to receive or run a copy of the
381 | Program. Ancillary propagation of a covered work occurring solely as a consequence of
382 | using peer-to-peer transmission to receive a copy likewise does not require
383 | acceptance. However, nothing other than this License grants you permission to
384 | propagate or modify any covered work. These actions infringe copyright if you do not
385 | accept this License. Therefore, by modifying or propagating a covered work, you
386 | indicate your acceptance of this License to do so.
387 |
388 | ### 10. Automatic Licensing of Downstream Recipients.
389 |
390 | Each time you convey a covered work, the recipient automatically receives a license
391 | from the original licensors, to run, modify and propagate that work, subject to this
392 | License. You are not responsible for enforcing compliance by third parties with this
393 | License.
394 |
395 | An “entity transaction” is a transaction transferring control of an
396 | organization, or substantially all assets of one, or subdividing an organization, or
397 | merging organizations. If propagation of a covered work results from an entity
398 | transaction, each party to that transaction who receives a copy of the work also
399 | receives whatever licenses to the work the party's predecessor in interest had or
400 | could give under the previous paragraph, plus a right to possession of the
401 | Corresponding Source of the work from the predecessor in interest, if the predecessor
402 | has it or can get it with reasonable efforts.
403 |
404 | You may not impose any further restrictions on the exercise of the rights granted or
405 | affirmed under this License. For example, you may not impose a license fee, royalty,
406 | or other charge for exercise of rights granted under this License, and you may not
407 | initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging
408 | that any patent claim is infringed by making, using, selling, offering for sale, or
409 | importing the Program or any portion of it.
410 |
411 | ### 11. Patents.
412 |
413 | A “contributor” is a copyright holder who authorizes use under this
414 | License of the Program or a work on which the Program is based. The work thus
415 | licensed is called the contributor's “contributor version”.
416 |
417 | A contributor's “essential patent claims” are all patent claims owned or
418 | controlled by the contributor, whether already acquired or hereafter acquired, that
419 | would be infringed by some manner, permitted by this License, of making, using, or
420 | selling its contributor version, but do not include claims that would be infringed
421 | only as a consequence of further modification of the contributor version. For
422 | purposes of this definition, “control” includes the right to grant patent
423 | sublicenses in a manner consistent with the requirements of this License.
424 |
425 | Each contributor grants you a non-exclusive, worldwide, royalty-free patent license
426 | under the contributor's essential patent claims, to make, use, sell, offer for sale,
427 | import and otherwise run, modify and propagate the contents of its contributor
428 | version.
429 |
430 | In the following three paragraphs, a “patent license” is any express
431 | agreement or commitment, however denominated, not to enforce a patent (such as an
432 | express permission to practice a patent or covenant not to sue for patent
433 | infringement). To “grant” such a patent license to a party means to make
434 | such an agreement or commitment not to enforce a patent against the party.
435 |
436 | If you convey a covered work, knowingly relying on a patent license, and the
437 | Corresponding Source of the work is not available for anyone to copy, free of charge
438 | and under the terms of this License, through a publicly available network server or
439 | other readily accessible means, then you must either (1) cause the Corresponding
440 | Source to be so available, or (2) arrange to deprive yourself of the benefit of the
441 | patent license for this particular work, or (3) arrange, in a manner consistent with
442 | the requirements of this License, to extend the patent license to downstream
443 | recipients. “Knowingly relying” means you have actual knowledge that, but
444 | for the patent license, your conveying the covered work in a country, or your
445 | recipient's use of the covered work in a country, would infringe one or more
446 | identifiable patents in that country that you have reason to believe are valid.
447 |
448 | If, pursuant to or in connection with a single transaction or arrangement, you
449 | convey, or propagate by procuring conveyance of, a covered work, and grant a patent
450 | license to some of the parties receiving the covered work authorizing them to use,
451 | propagate, modify or convey a specific copy of the covered work, then the patent
452 | license you grant is automatically extended to all recipients of the covered work and
453 | works based on it.
454 |
455 | A patent license is “discriminatory” if it does not include within the
456 | scope of its coverage, prohibits the exercise of, or is conditioned on the
457 | non-exercise of one or more of the rights that are specifically granted under this
458 | License. You may not convey a covered work if you are a party to an arrangement with
459 | a third party that is in the business of distributing software, under which you make
460 | payment to the third party based on the extent of your activity of conveying the
461 | work, and under which the third party grants, to any of the parties who would receive
462 | the covered work from you, a discriminatory patent license (a) in connection with
463 | copies of the covered work conveyed by you (or copies made from those copies), or (b)
464 | primarily for and in connection with specific products or compilations that contain
465 | the covered work, unless you entered into that arrangement, or that patent license
466 | was granted, prior to 28 March 2007.
467 |
468 | Nothing in this License shall be construed as excluding or limiting any implied
469 | license or other defenses to infringement that may otherwise be available to you
470 | under applicable patent law.
471 |
472 | ### 12. No Surrender of Others' Freedom.
473 |
474 | If conditions are imposed on you (whether by court order, agreement or otherwise)
475 | that contradict the conditions of this License, they do not excuse you from the
476 | conditions of this License. If you cannot convey a covered work so as to satisfy
477 | simultaneously your obligations under this License and any other pertinent
478 | obligations, then as a consequence you may not convey it at all. For example, if you
479 | agree to terms that obligate you to collect a royalty for further conveying from
480 | those to whom you convey the Program, the only way you could satisfy both those terms
481 | and this License would be to refrain entirely from conveying the Program.
482 |
483 | ### 13. Use with the GNU Affero General Public License.
484 |
485 | Notwithstanding any other provision of this License, you have permission to link or
486 | combine any covered work with a work licensed under version 3 of the GNU Affero
487 | General Public License into a single combined work, and to convey the resulting work.
488 | The terms of this License will continue to apply to the part which is the covered
489 | work, but the special requirements of the GNU Affero General Public License, section
490 | 13, concerning interaction through a network will apply to the combination as such.
491 |
492 | ### 14. Revised Versions of this License.
493 |
494 | The Free Software Foundation may publish revised and/or new versions of the GNU
495 | General Public License from time to time. Such new versions will be similar in spirit
496 | to the present version, but may differ in detail to address new problems or concerns.
497 |
498 | Each version is given a distinguishing version number. If the Program specifies that
499 | a certain numbered version of the GNU General Public License “or any later
500 | version” applies to it, you have the option of following the terms and
501 | conditions either of that numbered version or of any later version published by the
502 | Free Software Foundation. If the Program does not specify a version number of the GNU
503 | General Public License, you may choose any version ever published by the Free
504 | Software Foundation.
505 |
506 | If the Program specifies that a proxy can decide which future versions of the GNU
507 | General Public License can be used, that proxy's public statement of acceptance of a
508 | version permanently authorizes you to choose that version for the Program.
509 |
510 | Later license versions may give you additional or different permissions. However, no
511 | additional obligations are imposed on any author or copyright holder as a result of
512 | your choosing to follow a later version.
513 |
514 | ### 15. Disclaimer of Warranty.
515 |
516 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
517 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
518 | PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER
519 | EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
520 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
521 | QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
522 | DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
523 |
524 | ### 16. Limitation of Liability.
525 |
526 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
527 | COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS
528 | PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
529 | INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
530 | PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE
531 | OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
532 | WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
533 | POSSIBILITY OF SUCH DAMAGES.
534 |
535 | ### 17. Interpretation of Sections 15 and 16.
536 |
537 | If the disclaimer of warranty and limitation of liability provided above cannot be
538 | given local legal effect according to their terms, reviewing courts shall apply local
539 | law that most closely approximates an absolute waiver of all civil liability in
540 | connection with the Program, unless a warranty or assumption of liability accompanies
541 | a copy of the Program in return for a fee.
542 |
543 | END OF TERMS AND CONDITIONS
544 |
545 | ## How to Apply These Terms to Your New Programs
546 |
547 | If you develop a new program, and you want it to be of the greatest possible use to
548 | the public, the best way to achieve this is to make it free software which everyone
549 | can redistribute and change under these terms.
550 |
551 | To do so, attach the following notices to the program. It is safest to attach them
552 | to the start of each source file to most effectively state the exclusion of warranty;
553 | and each file should have at least the “copyright” line and a pointer to
554 | where the full notice is found.
555 |
556 |
557 | Copyright (C)
558 |
559 | This program is free software: you can redistribute it and/or modify
560 | it under the terms of the GNU General Public License as published by
561 | the Free Software Foundation, either version 3 of the License, or
562 | (at your option) any later version.
563 |
564 | This program is distributed in the hope that it will be useful,
565 | but WITHOUT ANY WARRANTY; without even the implied warranty of
566 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
567 | GNU General Public License for more details.
568 |
569 | You should have received a copy of the GNU General Public License
570 | along with this program. If not, see .
571 |
572 | Also add information on how to contact you by electronic and paper mail.
573 |
574 | If the program does terminal interaction, make it output a short notice like this
575 | when it starts in an interactive mode:
576 |
577 | Copyright (C)
578 | This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
579 | This is free software, and you are welcome to redistribute it
580 | under certain conditions; type 'show c' for details.
581 |
582 | The hypothetical commands 'show w' and 'show c' should show the appropriate parts of
583 | the General Public License. Of course, your program's commands might be different;
584 | for a GUI interface, you would use an “about box”.
585 |
586 | You should also get your employer (if you work as a programmer) or school, if any, to
587 | sign a “copyright disclaimer” for the program, if necessary. For more
588 | information on this, and how to apply and follow the GNU GPL, see
589 | <>.
590 |
591 | The GNU General Public License does not permit incorporating your program into
592 | proprietary programs. If your program is a subroutine library, you may consider it
593 | more useful to permit linking proprietary applications with the library. If this is
594 | what you want to do, use the GNU Lesser General Public License instead of this
595 | License. But first, please read
596 | <>.
597 |
--------------------------------------------------------------------------------