How questions get into this project, what may be published, and what must stay on your own machine. Read this before adding a single question.
The LPI Learning Materials — the free PDF and web textbook at learning.lpi.org — are licensed CC BY-NC-ND 4.0. The imprint of the 010-160 edition states it, and every page repeats it in the footer.
Two clauses matter:
- NC — NonCommercial. Commercial use is not permitted.
- ND — NoDerivatives. Adapted material may not be distributed.
The exam objectives are a different document. LPI publishes them at lpi.org/our-certifications/exam-010-objectives as a list of topics, key knowledge areas, utilities and weights — the specification of what the exam covers. Third-party books and courses have been written against published certification objectives for decades.
And underneath both: facts are not copyrightable. That ls lists directory contents,
that UID 0 is root, that $? holds an exit status — none of that belongs to anyone.
Copyright protects the expression of an idea, not the idea or the fact itself.
| Activity | Status |
|---|---|
| Reading the PDF to learn | Fine |
| Generating a personal question pool from the PDF, for your own study | Fine — ND restricts distribution, not private use |
| Publishing that pool in this repository | Not done here |
| Writing questions from the published objectives and general technical knowledge | Fine, and publishable |
So the repository ships an engine plus a small original sample, and each user generates their own full pool from their own copy of the material. Nobody redistributes LPI's work. Everyone uses a copy they are entitled to have, because LPI gives it away.
This is not legal advice. It is the reasoning this project operates on. If you need
certainty for your own use — particularly anything commercial — ask LPI directly at
learning@lpi.org, the address printed in the material's own imprint.
40 questions, written from the published objectives and general Linux knowledge. Nothing copied, paraphrased or adapted from the PDF.
They are tagged src: 'obj'. That tag is a claim, and the claim must be true. If you
cannot say where a question came from, it does not belong in the committed bank.
The sample is deliberately exactly 40 — one question per official weight point, so it constitutes precisely one full weighted exam and demonstrates the sampler working. It is not a study bank. Forty questions will not prepare anyone for a certification.
| Tag | Meaning | Committable |
|---|---|---|
obj |
Written from the published exam objectives and general knowledge | Yes |
own |
Written from your own experience, unrelated to any LPI text | Yes |
mat |
Derived from the LPI Learning Material | No — personal pool only |
The validator warns on any mat question found in data/questions.js. That is the
mechanical guard; the tag is only as honest as the person applying it.
Step 1 — get the material. Download the PDF or read the web version at learning.lpi.org. It is free and requires no account. This is your copy.
Step 2 — generate questions into a personal file.
Create data/questions.personal.js. It declares Q_PERSONAL instead of Q:
const Q_PERSONAL = [
{ id: 'P0001', s: '3.3', t: 3, src: 'mat',
q: 'Question text?',
o: ['A', 'B', 'C', 'D'],
a: 2,
e: 'Explanation.' }
];This file is in .gitignore. It stays on your machine.
Step 3 — load it. Add one line to each page, after data/questions.js:
<script src="data/questions.js"></script>
<script src="data/questions.personal.js"></script> <!-- optional, git-ignored -->
<script src="assets/js/core.js"></script>core.js uses Q_PERSONAL when it exists and is non-empty, and falls back to the shipped
sample otherwise. If the file is absent the browser logs a 404 and everything keeps
working.
Step 4 — validate.
node tools/validate-questions.js data/questions.personal.js config/exam.jsStructural errors fail. Objective coverage more than 2 points off the official weight share is reported as an imbalance — worth fixing, because it means your practice exams will not resemble the real distribution.
If you use an assistant to draft questions from your copy of the material, four things matter more than the prompt itself.
Verify every answer key. Structural validity is machine-checkable; correctness is not. A model will produce a confident, well-formatted question with the wrong option marked correct, and no tool in this repository will catch it.
Respect the weights. Ask for questions per objective in proportion to the official
weight, not evenly. Objective 3.3 is worth 4 of 40 points; 1.3, 4.1 and 5.4 are worth 1
each. config/exam.js holds the full table.
Keep the output in the personal pool. Anything generated from the PDF is src: 'mat'
and never reaches a commit.
Do not ask for the material to be reproduced. You want questions that test the objectives, not passages rewritten from the source.
A workable prompt:
You are helping me build a practice question bank for the LPI Linux Essentials
010-160 exam. I have the official learning material open.
Write N multiple-choice questions for objective <X.Y> — "<objective name>".
Rules:
- Test understanding of the concepts in the objective. Do not reproduce,
paraphrase or closely follow the wording of any source text.
- Four options, exactly one correct, three plausible distractors that reflect
real misconceptions rather than obvious filler.
- Add an explanation of 1-3 sentences saying why the answer is right and,
where it helps, why the closest wrong option is wrong.
- Output JavaScript objects in this exact shape:
{ id: 'Pxxxx', s: '<X.Y>', t: <topic>, src: 'mat',
q: '...', o: ['...','...','...','...'], a: <index>, e: '...' }
- Mark multi-answer questions with type: 'multi' and an array for a.
- Mark type-the-command questions with type: 'fill' and a fill array of every
acceptable answer, including common option orderings.
Then list each question's id with its correct answer, so I can check the keys
independently.
That last instruction is the important one. It gives you a checklist to verify against rather than a wall of text to trust.
Pull requests adding questions are welcome under one condition: src: 'obj' or 'own'
only. A contribution derived from the LPI material cannot be accepted, however good it
is, because this repository cannot redistribute it.
Run the validator before opening the PR. CI runs it too and blocks the merge on failure.