├── favicon.ico
├── assets
└── cow.glb
├── README.md
├── conway.js
├── index.html
├── conway.test.js
├── store.js
├── index.js
└── LICENSE
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/r2dev2/GameOfLife/HEAD/favicon.ico
--------------------------------------------------------------------------------
/assets/cow.glb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/r2dev2/GameOfLife/HEAD/assets/cow.glb
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Game of Life
2 |
3 | Conway's game of life but with 3d cows in WebVR.
4 |
5 | ## How
6 |
7 | 1. Go to https://r2dev2.github.io/GameOfLife/
8 | 2. `wasd` to move
9 | 3. use mouse to drag perspective
10 |
11 | ## Why
12 |
13 | Moo
14 |
15 | ## Credits
16 |
17 | * [Aframe](https://aframe.io)
18 | * "Low-poly cow - neutral pose" (https://skfb.ly/6sEqG) by Didier Hannoir is licensed under Creative Commons Attribution-ShareAlike (http://creativecommons.org/licenses/by-sa/4.0/).
19 |
--------------------------------------------------------------------------------
/conway.js:
--------------------------------------------------------------------------------
1 | export const nextBoard = board => board.map((row, i) => row.map((cell, j) => {
2 | const aliveNeighbors = getAliveNeighbors(board, i, j);
3 | return cell && 2 <= aliveNeighbors && aliveNeighbors <= 3 ||
4 | !cell && aliveNeighbors == 3;
5 | }));
6 |
7 | const bounds = x => [Math.max(x - 1, 0), x + 2];
8 | const getAliveNeighbors = (board, i, j) => board
9 | .slice(...bounds(i))
10 | .map(row => row.slice(...bounds(j)))
11 | .flat()
12 | .filter(Boolean)
13 | .length - board[i][j];
14 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Farmer John's Game of Life
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/conway.test.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Use samepack to run these
3 | *
4 | * python3 -m pip install samepack
5 | * same conway.test.js | node
6 | */
7 |
8 | import { nextBoard } from './conway.js';
9 | const assert = require('assert');
10 |
11 |
12 | const o = true;
13 | const _ = false;
14 |
15 | const stills = [
16 | [
17 | [ _, _, _, _ ],
18 | [ _, o, o, _ ],
19 | [ _, o, o, _ ],
20 | [ _, _, _, _ ],
21 | ],
22 | [
23 | [ _, _, _, _, _, _ ],
24 | [ _, _, o, o, _, _ ],
25 | [ _, o, _, _, o, _ ],
26 | [ _, _, o, _, o, _ ],
27 | [ _, _, _, o, _, _ ],
28 | [ _, _, _, _, _, _ ],
29 | ],
30 | [
31 | [ _, _, _, _, _ ],
32 | [ _, _, o, _, _ ],
33 | [ _, o, _, o, _ ],
34 | [ _, _, o, _, _ ],
35 | [ _, _, _, _, _ ],
36 | ]
37 | ];
38 |
39 | for (const still of stills) {
40 | assert.deepEqual(still, nextBoard(still));
41 | }
42 |
--------------------------------------------------------------------------------
/store.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Makeshift state manager
3 | *
4 | * @template {T}
5 | * @type {(value: T) => [() => T, (newValue: T) => void, (cb: (value: T) => void) => void]}
6 | */
7 | const useState = value => {
8 | const subscribers = [];
9 | return [
10 | function get() { return value; },
11 | function set(newValue) {
12 | if (newValue == value) return;
13 | value = newValue;
14 | subscribers.forEach(cb => cb(value));
15 | },
16 | function subscribe(cb) {
17 | subscribers.push(cb);
18 | cb(value);
19 | }
20 | ]
21 | };
22 |
23 |
24 | export const [rows, setRows, subRows] = useState(20);
25 | export const [cols, setCols, subCols] = useState(20);
26 |
27 | const initialBoard = Array(rows()).fill(Array(cols()).fill(false)).map(x => [...x]);
28 | export const [board, setBoard, subBoard] = useState(initialBoard);
29 |
30 | // Random board start
31 | const threshold = parseFloat(new URLSearchParams(location.search).get('amount')) || .5
32 | setBoard(board().map(row => row.map(() => Math.random() < threshold)));
33 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * Conways Game of Life but with cows in vr
5 | */
6 | import { board, setBoard, subBoard } from './store.js';
7 | import { nextBoard } from './conway.js';
8 |
9 | const timeBetweenBoards = 1000;
10 | const bigCowSize = '0.025';
11 | const smolCowSize = '0.015';
12 | const bigCow = `${bigCowSize} `.repeat(3).trim();
13 | const smolCow = `${smolCowSize} `.repeat(3).trim();
14 | const bigCowAnimation = 'property: rotation; to: 0 720 0; loop: false; dur: 1000';
15 | const smolCowAnimation = '';
16 | const bigCowRotation = '0 0 0';
17 | const smolCowRotation = '0 45 0';
18 | const assetLinks = [
19 | { id: 'cow', src: './assets/cow.glb' }
20 | ];
21 |
22 | const app = document.querySelector('#app');
23 | const scene = document.createElement('a-scene');
24 | const createPosition = (x, y) => `${x / 8} 1.2 ${-y / 8}`;
25 | const createCow = (x, y) => {
26 | const cow = document.createElement('a-gltf-model');
27 | cow.setAttribute('position', createPosition(x, y));
28 | cow.setAttribute('rotation', smolCowRotation);
29 | cow.setAttribute('color', '#4CC3D9');
30 | cow.setAttribute('scale', smolCow);
31 | cow.setAttribute('src', '#cow');
32 | return cow;
33 | }
34 | const createGround = () => {
35 | const ground = document.createElement('a-box');
36 | ground.setAttribute('color', '#00FF00');
37 | ground.setAttribute('height', '2');
38 | ground.setAttribute('width', '4');
39 | ground.setAttribute('depth', '4');
40 | return ground;
41 | };
42 | const createAssets = () => {
43 | const assets = document.createElement('a-assets');
44 | assetLinks.forEach(({ id, src }) => {
45 | const asset = document.createElement('a-asset-item');
46 | asset.setAttribute('id', id);
47 | asset.setAttribute('src', src);
48 | assets.appendChild(asset);
49 | });
50 | return assets;
51 | };
52 | scene.appendChild(createAssets());
53 | scene.appendChild(createGround());
54 | const cows = board().map((row, i) => row.map((_isFilled, j) => {
55 | return createCow(i - 10, j - 10);
56 | }));
57 | cows.flat().forEach(cow => scene.appendChild(cow));
58 | app.appendChild(scene);
59 |
60 | subBoard(board => board.forEach((row, i) => row.map((isFilled, j) => {
61 | cows[i][j].setAttribute('scale', isFilled ? bigCow : smolCow);
62 | cows[i][j].setAttribute('animation', isFilled ? bigCowAnimation : smolCowAnimation);
63 | cows[i][j].setAttribute('rotation', isFilled ? bigCowRotation : smolCowRotation);
64 | })));
65 |
66 | setInterval(() => {
67 | setBoard(nextBoard(board()));
68 | }, timeBetweenBoards);
69 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU AFFERO GENERAL PUBLIC LICENSE
2 | Version 3, 19 November 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU Affero General Public License is a free, copyleft license for
11 | software and other kinds of works, specifically designed to ensure
12 | cooperation with the community in the case of network server software.
13 |
14 | The licenses for most software and other practical works are designed
15 | to take away your freedom to share and change the works. By contrast,
16 | our General Public Licenses are intended to guarantee your freedom to
17 | share and change all versions of a program--to make sure it remains free
18 | software for all its users.
19 |
20 | When we speak of free software, we are referring to freedom, not
21 | price. Our General Public Licenses are designed to make sure that you
22 | have the freedom to distribute copies of free software (and charge for
23 | them if you wish), that you receive source code or can get it if you
24 | want it, that you can change the software or use pieces of it in new
25 | free programs, and that you know you can do these things.
26 |
27 | Developers that use our General Public Licenses protect your rights
28 | with two steps: (1) assert copyright on the software, and (2) offer
29 | you this License which gives you legal permission to copy, distribute
30 | and/or modify the software.
31 |
32 | A secondary benefit of defending all users' freedom is that
33 | improvements made in alternate versions of the program, if they
34 | receive widespread use, become available for other developers to
35 | incorporate. Many developers of free software are heartened and
36 | encouraged by the resulting cooperation. However, in the case of
37 | software used on network servers, this result may fail to come about.
38 | The GNU General Public License permits making a modified version and
39 | letting the public access it on a server without ever releasing its
40 | source code to the public.
41 |
42 | The GNU Affero General Public License is designed specifically to
43 | ensure that, in such cases, the modified source code becomes available
44 | to the community. It requires the operator of a network server to
45 | provide the source code of the modified version running there to the
46 | users of that server. Therefore, public use of a modified version, on
47 | a publicly accessible server, gives the public access to the source
48 | code of the modified version.
49 |
50 | An older license, called the Affero General Public License and
51 | published by Affero, was designed to accomplish similar goals. This is
52 | a different license, not a version of the Affero GPL, but Affero has
53 | released a new version of the Affero GPL which permits relicensing under
54 | this license.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | TERMS AND CONDITIONS
60 |
61 | 0. Definitions.
62 |
63 | \This License\ refers to version 3 of the GNU Affero General Public License.
64 |
65 | \Copyright\ also means copyright-like laws that apply to other kinds of
66 | works, such as semiconductor masks.
67 |
68 | \The Program\ refers to any copyrightable work licensed under this
69 | License. Each licensee is addressed as \you\. \Licensees\ and
70 | \recipients\ may be individuals or organizations.
71 |
72 | To \modify\ a work means to copy from or adapt all or part of the work
73 | in a fashion requiring copyright permission, other than the making of an
74 | exact copy. The resulting work is called a \modified version\ of the
75 | earlier work or a work \based on\ the earlier work.
76 |
77 | A \covered work\ means either the unmodified Program or a work based
78 | on the Program.
79 |
80 | To \propagate\ a work means to do anything with it that, without
81 | permission, would make you directly or secondarily liable for
82 | infringement under applicable copyright law, except executing it on a
83 | computer or modifying a private copy. Propagation includes copying,
84 | distribution (with or without modification), making available to the
85 | public, and in some countries other activities as well.
86 |
87 | To \convey\ a work means any kind of propagation that enables other
88 | parties to make or receive copies. Mere interaction with a user through
89 | a computer network, with no transfer of a copy, is not conveying.
90 |
91 | An interactive user interface displays \Appropriate Legal Notices\
92 | to the extent that it includes a convenient and prominently visible
93 | feature that (1) displays an appropriate copyright notice, and (2)
94 | tells the user that there is no warranty for the work (except to the
95 | extent that warranties are provided), that licensees may convey the
96 | work under this License, and how to view a copy of this License. If
97 | the interface presents a list of user commands or options, such as a
98 | menu, a prominent item in the list meets this criterion.
99 |
100 | 1. Source Code.
101 |
102 | The \source code\ for a work means the preferred form of the work
103 | for making modifications to it. \Object code\ means any non-source
104 | form of a work.
105 |
106 | A \Standard Interface\ means an interface that either is an official
107 | standard defined by a recognized standards body, or, in the case of
108 | interfaces specified for a particular programming language, one that
109 | is widely used among developers working in that language.
110 |
111 | The \System Libraries\ of an executable work include anything, other
112 | than the work as a whole, that (a) is included in the normal form of
113 | packaging a Major Component, but which is not part of that Major
114 | Component, and (b) serves only to enable use of the work with that
115 | Major Component, or to implement a Standard Interface for which an
116 | implementation is available to the public in source code form. A
117 | \Major Component\, in this context, means a major essential component
118 | (kernel, window system, and so on) of the specific operating system
119 | (if any) on which the executable work runs, or a compiler used to
120 | produce the work, or an object code interpreter used to run it.
121 |
122 | The \Corresponding Source\ for a work in object code form means all
123 | the source code needed to generate, install, and (for an executable
124 | work) run the object code and to modify the work, including scripts to
125 | control those activities. However, it does not include the work's
126 | System Libraries, or general-purpose tools or generally available free
127 | programs which are used unmodified in performing those activities but
128 | which are not part of the work. For example, Corresponding Source
129 | includes interface definition files associated with source files for
130 | the work, and the source code for shared libraries and dynamically
131 | linked subprograms that the work is specifically designed to require,
132 | such as by intimate data communication or control flow between those
133 | subprograms and other parts of the work.
134 |
135 | The Corresponding Source need not include anything that users
136 | can regenerate automatically from other parts of the Corresponding
137 | Source.
138 |
139 | The Corresponding Source for a work in source code form is that
140 | same work.
141 |
142 | 2. Basic Permissions.
143 |
144 | All rights granted under this License are granted for the term of
145 | copyright on the Program, and are irrevocable provided the stated
146 | conditions are met. This License explicitly affirms your unlimited
147 | permission to run the unmodified Program. The output from running a
148 | covered work is covered by this License only if the output, given its
149 | content, constitutes a covered work. This License acknowledges your
150 | rights 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
153 | convey, without conditions so long as your license otherwise remains
154 | in force. You may convey covered works to others for the sole purpose
155 | of having them make modifications exclusively for you, or provide you
156 | with facilities for running those works, provided that you comply with
157 | the terms of this License in conveying all material for which you do
158 | not control copyright. Those thus making or running the covered works
159 | for you must do so exclusively on your behalf, under your direction
160 | and control, on terms that prohibit them from making any copies of
161 | your copyrighted material outside their relationship with you.
162 |
163 | Conveying under any other circumstances is permitted solely under
164 | the conditions stated below. Sublicensing is not allowed; section 10
165 | makes it unnecessary.
166 |
167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
168 |
169 | No covered work shall be deemed part of an effective technological
170 | measure under any applicable law fulfilling obligations under article
171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
172 | similar laws prohibiting or restricting circumvention of such
173 | measures.
174 |
175 | When you convey a covered work, you waive any legal power to forbid
176 | circumvention of technological measures to the extent such circumvention
177 | is effected by exercising rights under this License with respect to
178 | the covered work, and you disclaim any intention to limit operation or
179 | modification of the work as a means of enforcing, against the work's
180 | users, your or third parties' legal rights to forbid circumvention of
181 | technological measures.
182 |
183 | 4. Conveying Verbatim Copies.
184 |
185 | You may convey verbatim copies of the Program's source code as you
186 | receive it, in any medium, provided that you conspicuously and
187 | appropriately publish on each copy an appropriate copyright notice;
188 | keep intact all notices stating that this License and any
189 | non-permissive terms added in accord with section 7 apply to the code;
190 | keep intact all notices of the absence of any warranty; and give all
191 | recipients a copy of this License along with the Program.
192 |
193 | You may charge any price or no price for each copy that you convey,
194 | and you may offer support or warranty protection for a fee.
195 |
196 | 5. Conveying Modified Source Versions.
197 |
198 | You may convey a work based on the Program, or the modifications to
199 | produce it from the Program, in the form of source code under the
200 | terms of section 4, provided that you also meet all of these conditions:
201 |
202 | a) The work must carry prominent notices stating that you modified
203 | it, and giving a relevant date.
204 |
205 | b) The work must carry prominent notices stating that it is
206 | released under this License and any conditions added under section
207 | 7. This requirement modifies the requirement in section 4 to
208 | \keep intact all notices\.
209 |
210 | c) You must license the entire work, as a whole, under this
211 | License to anyone who comes into possession of a copy. This
212 | License will therefore apply, along with any applicable section 7
213 | additional terms, to the whole of the work, and all its parts,
214 | regardless of how they are packaged. This License gives no
215 | permission to license the work in any other way, but it does not
216 | invalidate such permission if you have separately received it.
217 |
218 | d) If the work has interactive user interfaces, each must display
219 | Appropriate Legal Notices; however, if the Program has interactive
220 | interfaces that do not display Appropriate Legal Notices, your
221 | work need not make them do so.
222 |
223 | A compilation of a covered work with other separate and independent
224 | works, which are not by their nature extensions of the covered work,
225 | and which are not combined with it such as to form a larger program,
226 | in or on a volume of a storage or distribution medium, is called an
227 | \aggregate\ if the compilation and its resulting copyright are not
228 | used to limit the access or legal rights of the compilation's users
229 | beyond what the individual works permit. Inclusion of a covered work
230 | in an aggregate does not cause this License to apply to the other
231 | parts of the aggregate.
232 |
233 | 6. Conveying Non-Source Forms.
234 |
235 | You may convey a covered work in object code form under the terms
236 | of sections 4 and 5, provided that you also convey the
237 | machine-readable Corresponding Source under the terms of this License,
238 | in one of these ways:
239 |
240 | a) Convey the object code in, or embodied in, a physical product
241 | (including a physical distribution medium), accompanied by the
242 | Corresponding Source fixed on a durable physical medium
243 | customarily used for software interchange.
244 |
245 | b) Convey the object code in, or embodied in, a physical product
246 | (including a physical distribution medium), accompanied by a
247 | written offer, valid for at least three years and valid for as
248 | long as you offer spare parts or customer support for that product
249 | model, to give anyone who possesses the object code either (1) a
250 | copy of the Corresponding Source for all the software in the
251 | product that is covered by this License, on a durable physical
252 | medium customarily used for software interchange, for a price no
253 | more than your reasonable cost of physically performing this
254 | conveying of source, or (2) access to copy the
255 | Corresponding Source from a network server at no charge.
256 |
257 | c) Convey individual copies of the object code with a copy of the
258 | written offer to provide the Corresponding Source. This
259 | alternative is allowed only occasionally and noncommercially, and
260 | only if you received the object code with such an offer, in accord
261 | with subsection 6b.
262 |
263 | d) Convey the object code by offering access from a designated
264 | place (gratis or for a charge), and offer equivalent access to the
265 | Corresponding Source in the same way through the same place at no
266 | further charge. You need not require recipients to copy the
267 | Corresponding Source along with the object code. If the place to
268 | copy the object code is a network server, the Corresponding Source
269 | may be on a different server (operated by you or a third party)
270 | that supports equivalent copying facilities, provided you maintain
271 | clear directions next to the object code saying where to find the
272 | Corresponding Source. Regardless of what server hosts the
273 | Corresponding Source, you remain obligated to ensure that it is
274 | available for as long as needed to satisfy these requirements.
275 |
276 | e) Convey the object code using peer-to-peer transmission, provided
277 | you inform other peers where the object code and Corresponding
278 | Source of the work are being offered to the general public at no
279 | charge under subsection 6d.
280 |
281 | A separable portion of the object code, whose source code is excluded
282 | from the Corresponding Source as a System Library, need not be
283 | included in conveying the object code work.
284 |
285 | A \User Product\ is either (1) a \consumer product\, which means any
286 | tangible personal property which is normally used for personal, family,
287 | or household purposes, or (2) anything designed or sold for incorporation
288 | into a dwelling. In determining whether a product is a consumer product,
289 | doubtful cases shall be resolved in favor of coverage. For a particular
290 | product received by a particular user,
291 | ormally used\ refers to a
292 | typical or common use of that class of product, regardless of the status
293 | of the particular user or of the way in which the particular user
294 | actually uses, or expects or is expected to use, the product. A product
295 | is a consumer product regardless of whether the product has substantial
296 | commercial, industrial or non-consumer uses, unless such uses represent
297 | the only significant mode of use of the product.
298 |
299 | \Installation Information\ for a User Product means any methods,
300 | procedures, authorization keys, or other information required to install
301 | and execute modified versions of a covered work in that User Product from
302 | a modified version of its Corresponding Source. The information must
303 | suffice to ensure that the continued functioning of the modified object
304 | code is in no case prevented or interfered with solely because
305 | modification has been made.
306 |
307 | If you convey an object code work under this section in, or with, or
308 | specifically for use in, a User Product, and the conveying occurs as
309 | part of a transaction in which the right of possession and use of the
310 | User Product is transferred to the recipient in perpetuity or for a
311 | fixed term (regardless of how the transaction is characterized), the
312 | Corresponding Source conveyed under this section must be accompanied
313 | by the Installation Information. But this requirement does not apply
314 | if neither you nor any third party retains the ability to install
315 | modified object code on the User Product (for example, the work has
316 | been installed in ROM).
317 |
318 | The requirement to provide Installation Information does not include a
319 | requirement to continue to provide support service, warranty, or updates
320 | for a work that has been modified or installed by the recipient, or for
321 | the User Product in which it has been modified or installed. Access to a
322 | network may be denied when the modification itself materially and
323 | adversely affects the operation of the network or violates the rules and
324 | protocols for communication across the network.
325 |
326 | Corresponding Source conveyed, and Installation Information provided,
327 | in accord with this section must be in a format that is publicly
328 | documented (and with an implementation available to the public in
329 | source code form), and must require no special password or key for
330 | unpacking, reading or copying.
331 |
332 | 7. Additional Terms.
333 |
334 | \Additional permissions\ are terms that supplement the terms of this
335 | License by making exceptions from one or more of its conditions.
336 | Additional permissions that are applicable to the entire Program shall
337 | be treated as though they were included in this License, to the extent
338 | that they are valid under applicable law. If additional permissions
339 | apply only to part of the Program, that part may be used separately
340 | under those permissions, but the entire Program remains governed by
341 | this License without regard to the additional permissions.
342 |
343 | When you convey a copy of a covered work, you may at your option
344 | remove any additional permissions from that copy, or from any part of
345 | it. (Additional permissions may be written to require their own
346 | removal in certain cases when you modify the work.) You may place
347 | additional permissions on material, added by you to a covered work,
348 | for which you have or can give appropriate copyright permission.
349 |
350 | Notwithstanding any other provision of this License, for material you
351 | add to a covered work, you may (if authorized by the copyright holders of
352 | that material) supplement the terms of this License with terms:
353 |
354 | a) Disclaiming warranty or limiting liability differently from the
355 | terms of sections 15 and 16 of this License; or
356 |
357 | b) Requiring preservation of specified reasonable legal notices or
358 | author attributions in that material or in the Appropriate Legal
359 | Notices displayed by works containing it; or
360 |
361 | c) Prohibiting misrepresentation of the origin of that material, or
362 | requiring that modified versions of such material be marked in
363 | reasonable ways as different from the original version; or
364 |
365 | d) Limiting the use for publicity purposes of names of licensors or
366 | authors of the material; or
367 |
368 | e) Declining to grant rights under trademark law for use of some
369 | trade names, trademarks, or service marks; or
370 |
371 | f) Requiring indemnification of licensors and authors of that
372 | material by anyone who conveys the material (or modified versions of
373 | it) with contractual assumptions of liability to the recipient, for
374 | any liability that these contractual assumptions directly impose on
375 | those licensors and authors.
376 |
377 | All other non-permissive additional terms are considered \further
378 | restrictions\ within the meaning of section 10. If the Program as you
379 | received it, or any part of it, contains a notice stating that it is
380 | governed by this License along with a term that is a further
381 | restriction, you may remove that term. If a license document contains
382 | a further restriction but permits relicensing or conveying under this
383 | License, you may add to a covered work material governed by the terms
384 | of that license document, provided that the further restriction does
385 | not survive such relicensing or conveying.
386 |
387 | If you add terms to a covered work in accord with this section, you
388 | must place, in the relevant source files, a statement of the
389 | additional terms that apply to those files, or a notice indicating
390 | where to find the applicable terms.
391 |
392 | Additional terms, permissive or non-permissive, may be stated in the
393 | form of a separately written license, or stated as exceptions;
394 | the above requirements apply either way.
395 |
396 | 8. Termination.
397 |
398 | You may not propagate or modify a covered work except as expressly
399 | provided under this License. Any attempt otherwise to propagate or
400 | modify it is void, and will automatically terminate your rights under
401 | this License (including any patent licenses granted under the third
402 | paragraph of section 11).
403 |
404 | However, if you cease all violation of this License, then your
405 | license from a particular copyright holder is reinstated (a)
406 | provisionally, unless and until the copyright holder explicitly and
407 | finally terminates your license, and (b) permanently, if the copyright
408 | holder fails to notify you of the violation by some reasonable means
409 | prior to 60 days after the cessation.
410 |
411 | Moreover, your license from a particular copyright holder is
412 | reinstated permanently if the copyright holder notifies you of the
413 | violation by some reasonable means, this is the first time you have
414 | received notice of violation of this License (for any work) from that
415 | copyright holder, and you cure the violation prior to 30 days after
416 | your receipt of the notice.
417 |
418 | Termination of your rights under this section does not terminate the
419 | licenses of parties who have received copies or rights from you under
420 | this License. If your rights have been terminated and not permanently
421 | reinstated, you do not qualify to receive new licenses for the same
422 | material under section 10.
423 |
424 | 9. Acceptance Not Required for Having Copies.
425 |
426 | You are not required to accept this License in order to receive or
427 | run a copy of the Program. Ancillary propagation of a covered work
428 | occurring solely as a consequence of using peer-to-peer transmission
429 | to receive a copy likewise does not require acceptance. However,
430 | nothing other than this License grants you permission to propagate or
431 | modify any covered work. These actions infringe copyright if you do
432 | not accept this License. Therefore, by modifying or propagating a
433 | covered work, you indicate your acceptance of this License to do so.
434 |
435 | 10. Automatic Licensing of Downstream Recipients.
436 |
437 | Each time you convey a covered work, the recipient automatically
438 | receives a license from the original licensors, to run, modify and
439 | propagate that work, subject to this License. You are not responsible
440 | for enforcing compliance by third parties with this License.
441 |
442 | An \entity transaction\ is a transaction transferring control of an
443 | organization, or substantially all assets of one, or subdividing an
444 | organization, or merging organizations. If propagation of a covered
445 | work results from an entity transaction, each party to that
446 | transaction who receives a copy of the work also receives whatever
447 | licenses to the work the party's predecessor in interest had or could
448 | give under the previous paragraph, plus a right to possession of the
449 | Corresponding Source of the work from the predecessor in interest, if
450 | the predecessor has it or can get it with reasonable efforts.
451 |
452 | You may not impose any further restrictions on the exercise of the
453 | rights granted or affirmed under this License. For example, you may
454 | not impose a license fee, royalty, or other charge for exercise of
455 | rights granted under this License, and you may not initiate litigation
456 | (including a cross-claim or counterclaim in a lawsuit) alleging that
457 | any patent claim is infringed by making, using, selling, offering for
458 | sale, or importing the Program or any portion of it.
459 |
460 | 11. Patents.
461 |
462 | A \contributor\ is a copyright holder who authorizes use under this
463 | License of the Program or a work on which the Program is based. The
464 | work thus licensed is called the contributor's \contributor version\.
465 |
466 | A contributor's \essential patent claims\ are all patent claims
467 | owned or controlled by the contributor, whether already acquired or
468 | hereafter acquired, that would be infringed by some manner, permitted
469 | by this License, of making, using, or selling its contributor version,
470 | but do not include claims that would be infringed only as a
471 | consequence of further modification of the contributor version. For
472 | purposes of this definition, \control\ includes the right to grant
473 | patent sublicenses in a manner consistent with the requirements of
474 | this License.
475 |
476 | Each contributor grants you a non-exclusive, worldwide, royalty-free
477 | patent license under the contributor's essential patent claims, to
478 | make, use, sell, offer for sale, import and otherwise run, modify and
479 | propagate the contents of its contributor version.
480 |
481 | In the following three paragraphs, a \patent license\ is any express
482 | agreement or commitment, however denominated, not to enforce a patent
483 | (such as an express permission to practice a patent or covenant not to
484 | sue for patent infringement). To \grant\ such a patent license to a
485 | party means to make such an agreement or commitment not to enforce a
486 | patent against the party.
487 |
488 | If you convey a covered work, knowingly relying on a patent license,
489 | and the Corresponding Source of the work is not available for anyone
490 | to copy, free of charge and under the terms of this License, through a
491 | publicly available network server or other readily accessible means,
492 | then you must either (1) cause the Corresponding Source to be so
493 | available, or (2) arrange to deprive yourself of the benefit of the
494 | patent license for this particular work, or (3) arrange, in a manner
495 | consistent with the requirements of this License, to extend the patent
496 | license to downstream recipients. \Knowingly relying\ means you have
497 | actual knowledge that, but for the patent license, your conveying the
498 | covered work in a country, or your recipient's use of the covered work
499 | in a country, would infringe one or more identifiable patents in that
500 | country that you have reason to believe are valid.
501 |
502 | If, pursuant to or in connection with a single transaction or
503 | arrangement, you convey, or propagate by procuring conveyance of, a
504 | covered work, and grant a patent license to some of the parties
505 | receiving the covered work authorizing them to use, propagate, modify
506 | or convey a specific copy of the covered work, then the patent license
507 | you grant is automatically extended to all recipients of the covered
508 | work and works based on it.
509 |
510 | A patent license is \discriminatory\ if it does not include within
511 | the scope of its coverage, prohibits the exercise of, or is
512 | conditioned on the non-exercise of one or more of the rights that are
513 | specifically granted under this License. You may not convey a covered
514 | work if you are a party to an arrangement with a third party that is
515 | in the business of distributing software, under which you make payment
516 | to the third party based on the extent of your activity of conveying
517 | the work, and under which the third party grants, to any of the
518 | parties who would receive the covered work from you, a discriminatory
519 | patent license (a) in connection with copies of the covered work
520 | conveyed by you (or copies made from those copies), or (b) primarily
521 | for and in connection with specific products or compilations that
522 | contain the covered work, unless you entered into that arrangement,
523 | or that patent license was granted, prior to 28 March 2007.
524 |
525 | Nothing in this License shall be construed as excluding or limiting
526 | any implied license or other defenses to infringement that may
527 | otherwise be available to you under applicable patent law.
528 |
529 | 12. No Surrender of Others' Freedom.
530 |
531 | If conditions are imposed on you (whether by court order, agreement or
532 | otherwise) that contradict the conditions of this License, they do not
533 | excuse you from the conditions of this License. If you cannot convey a
534 | covered work so as to satisfy simultaneously your obligations under this
535 | License and any other pertinent obligations, then as a consequence you may
536 | not convey it at all. For example, if you agree to terms that obligate you
537 | to collect a royalty for further conveying from those to whom you convey
538 | the Program, the only way you could satisfy both those terms and this
539 | License would be to refrain entirely from conveying the Program.
540 |
541 | 13. Remote Network Interaction; Use with the GNU General Public License.
542 |
543 | Notwithstanding any other provision of this License, if you modify the
544 | Program, your modified version must prominently offer all users
545 | interacting with it remotely through a computer network (if your version
546 | supports such interaction) an opportunity to receive the Corresponding
547 | Source of your version by providing access to the Corresponding Source
548 | from a network server at no charge, through some standard or customary
549 | means of facilitating copying of software. This Corresponding Source
550 | shall include the Corresponding Source for any work covered by version 3
551 | of the GNU General Public License that is incorporated pursuant to the
552 | following paragraph.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the work with which it is combined will remain governed by version
560 | 3 of the GNU General Public License.
561 |
562 | 14. Revised Versions of this License.
563 |
564 | The Free Software Foundation may publish revised and/or new versions of
565 | the GNU Affero General Public License from time to time. Such new versions
566 | will be similar in spirit to the present version, but may differ in detail to
567 | address new problems or concerns.
568 |
569 | Each version is given a distinguishing version number. If the
570 | Program specifies that a certain numbered version of the GNU Affero General
571 | Public License \or any later version\ applies to it, you have the
572 | option of following the terms and conditions either of that numbered
573 | version or of any later version published by the Free Software
574 | Foundation. If the Program does not specify a version number of the
575 | GNU Affero General Public License, you may choose any version ever published
576 | by the Free Software Foundation.
577 |
578 | If the Program specifies that a proxy can decide which future
579 | versions of the GNU Affero General Public License can be used, that proxy's
580 | public statement of acceptance of a version permanently authorizes you
581 | to choose that version for the Program.
582 |
583 | Later license versions may give you additional or different
584 | permissions. However, no additional obligations are imposed on any
585 | author or copyright holder as a result of your choosing to follow a
586 | later version.
587 |
588 | 15. Disclaimer of Warranty.
589 |
590 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
591 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
592 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \AS IS\ WITHOUT WARRANTY
593 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
594 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
595 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
596 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
597 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
598 |
599 | 16. Limitation of Liability.
600 |
601 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
602 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
603 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
604 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
605 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
606 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
607 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
608 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
609 | SUCH DAMAGES.
610 |
611 | 17. Interpretation of Sections 15 and 16.
612 |
613 | If the disclaimer of warranty and limitation of liability provided
614 | above cannot be given local legal effect according to their terms,
615 | reviewing courts shall apply local law that most closely approximates
616 | an absolute waiver of all civil liability in connection with the
617 | Program, unless a warranty or assumption of liability accompanies a
618 | copy of the Program in return for a fee.
619 |
620 | END OF TERMS AND CONDITIONS
621 |
622 | How to Apply These Terms to Your New Programs
623 |
624 | If you develop a new program, and you want it to be of the greatest
625 | possible use to the public, the best way to achieve this is to make it
626 | free software which everyone can redistribute and change under these terms.
627 |
628 | To do so, attach the following notices to the program. It is safest
629 | to attach them to the start of each source file to most effectively
630 | state the exclusion of warranty; and each file should have at least
631 | the \copyright\ line and a pointer to where the full notice is found.
632 |
633 |
634 | Copyright (C)
635 |
636 | This program is free software: you can redistribute it and/or modify
637 | it under the terms of the GNU Affero General Public License as published
638 | by the Free Software Foundation, either version 3 of the License, or
639 | (at your option) any later version.
640 |
641 | This program is distributed in the hope that it will be useful,
642 | but WITHOUT ANY WARRANTY; without even the implied warranty of
643 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
644 | GNU Affero General Public License for more details.
645 |
646 | You should have received a copy of the GNU Affero General Public License
647 | along with this program. If not, see .
648 |
649 | Also add information on how to contact you by electronic and paper mail.
650 |
651 | If your software can interact with users remotely through a computer
652 | network, you should also make sure that it provides a way for users to
653 | get its source. For example, if your program is a web application, its
654 | interface could display a \Source\ link that leads users to an archive
655 | of the code. There are many ways you could offer source, and different
656 | solutions will be better for different programs; see section 13 for the
657 | specific requirements.
658 |
659 | You should also get your employer (if you work as a programmer) or school,
660 | if any, to sign a \copyright disclaimer\ for the program, if necessary.
661 | For more information on this, and how to apply and follow the GNU AGPL, see
662 | .
663 |
664 |
--------------------------------------------------------------------------------