Privacy Policy
Last updated: 2026-07-08
This Privacy Policy explains what personal data Linuxlab collects, why we collect it, how we use and keep it, and the choices and rights you have. It is written in plain language. This English version is the authoritative version; any translation is provided for convenience only.
Linuxlab ("Linuxlab", "we", "us", or "our") operates the website at https://linuxlab.io and the interactive practice environment at sandbox.linuxlab.io (together, the "Service"). The Service is an online Linux education platform: a multi-part Linux textbook you read, and a hands-on course where you run real Linux commands in a temporary, isolated container.
If you only read the textbook without signing in, we collect very little about you. If you create an account or use the practice sandbox, we collect the data described below and nothing more.
1. Who We Are
- Operator: Automation and Progress LLC. Linuxlab is the brand name for the Service.
- What we do: We run an online platform for learning Linux, made of a textbook you read and a sandbox where you run Linux commands.
- Where we are established: United States.
- Privacy contact: Use the feedback form inside your account ("Write from your account"). We do not use
admin@linuxlab.ioas a contact address; it is an internal system account only.
2. What Linuxlab Does
Linuxlab is an education platform with two parts.
- Reading platform. A multi-part Linux textbook (Parts I to IV), available in Russian and English. If you are signed in, we remember where you stopped reading (your scroll position and, for media, the timestamp) so you can resume. This is resume-only. We do not use points, badges, streaks, or any other gamified scoring.
- Interactive hands-on course (the "Sandbox"). When you are signed in and this feature is enabled, you can run real Linux shell commands in a private, temporary Docker container (
linuxlab/linux-base, Ubuntu 24.04). Each session gets its own container. The container has no internet access and no access to our host systems. It is destroyed when you disconnect or when a hard 30-minute time limit is reached. See Section 5 for exactly what a sandbox session does and does not record.
You need an account only to save reading progress and to use the Sandbox. Accounts use an email address, with a password or Google sign-in (Section 3.2). At launch, the Service is free to use. Payments are not live today. If paid access is introduced later, it will be a one-time purchase per course, with no subscriptions, no recurring billing, and no auto-renewal.
This is not an artificial-intelligence product. We do not run any AI models, we do not send your data to any AI model, and we do not use your data to train any model.
3. Information We Collect
3.1 What We Do NOT Collect
We want to be clear about what we never ask for or store:
- No name, username, display name, phone number, birthday, or postal or physical address. Signing up asks only for an email address and a password, or uses Google sign-in, which shares only your email address with us (Section 3.2).
- No card numbers, CVV, or bank details. Payments are not live. If billing is introduced later, card details would be handled by a payment processor and would never be stored by Linuxlab.
- No raw IP address in our analytics. In analytics your IP address is used only as an input to a one-way hash; the IP itself is never stored.
- No full page URLs or query strings in analytics. We strip the query string and fragment before storing anything.
- No terminal commands, keystrokes, shell history, scrollback, or command output from the Sandbox. These travel live over the connection and are never written to disk or to a database.
- No cross-site tracking, advertising pixels, or third-party analytics tools. We do not use Google Analytics, Meta Pixel, Sentry, Datadog, PostHog, Plausible, Mixpanel, Segment, Hotjar, or any similar service. Our analytics is first-party only.
- No magic links, one-time codes, two-factor apps, biometrics, or government IDs. The only ways to sign in are email + password and Google sign-in (Section 3.2).
- No AI model calls of any kind.
- No sensitive personal information in the meaning of California law.
3.2 Account Data
When you create an account, we collect and store:
- Email address. This is your only account identifier and is required to sign up.
- Password (password accounts). We store only a secure hash of your password (Argon2id). We never store or log your password in plain text; it exists in plain text only in transit while you type it. If you signed up with Google, your account has no password until you set one through a password reset.
- Preferred language (
ruoren). This is the only profile field you can edit. - Google sign-in. If you choose to sign in with Google, Google confirms to us the email address of your Google account and that it is verified; that email is your account identifier. We receive no name, no photo, and no other profile data, we get no access to your Google account, and we do not store Google tokens or Google identifiers. Google processes your sign-in under its own privacy policy (https://policies.google.com/privacy).
Email verification is required before you can read authenticated content. Accounts created or signed in through Google count as verified, because Google confirms control of the email address. Note that verification and password-reset emails are not currently sent. We will not claim to send you an email as a live behavior until that sending path is in place.
3.3 Session and Security Data
When you sign in, for each session we record:
- Login IP address (taken from your connection or the
X-Forwarded-Forheader). - Browser User-Agent (the identifying string your browser sends).
- A hashed session token. The raw token exists only inside your
ll_sessioncookie. We store only a peppered hash of it, never the raw value. - Short-lived verification and reset token hashes, if the corresponding flows are used (valid up to 48 hours for verification, up to 2 hours for reset, single use).
3.4 Reading Progress
If you are signed in, we store your progress per textbook section: reading state, scroll percentage, and media timestamp. This is tied to your account and is used only so you can resume where you left off.
3.5 Feedback You Submit
If you send feedback (for example a rating from 1 to 5 and a free-text comment of up to 4,000 characters), we store it so we can read and reply. Your comment may contain whatever you type, so please do not include information you do not want us to have.
Feedback may include an optional diagnostics summary that you can review before you submit it. When included, it can contain: your browser and version, operating system and version, screen size, viewport size, your browser's language settings, a keyboard-layout signature, your timezone, the interface language, and the page path you were on. This is device-related information, so we treat it as personal data. We limit its size on the server (at most 24 fields, at most 400 characters per value, at most 4,000 characters total).
3.6 Analytics Data
We run a small, first-party analytics system to count page views. It is cookie-free and it honors Do-Not-Track and Global Privacy Control signals (see Section 4). For each page view, subject to those signals, we may store:
- A visitor pseudonym (
session_key). This is either the randomll_vidvalue from your browser's local storage, or a keyed hash computed on our server from your IP address and User-Agent. Your raw IP address is never stored; it is only an input to the hash. If you send a Do-Not-Track or Global Privacy Control signal, this pseudonym is omitted entirely. - An account link (
user_id), present only for signed-in readers who are not sending a Do-Not-Track or Global Privacy Control signal. Under those signals, no account link is stored. - Coarse country (a two-letter code), derived only from a content-delivery-network edge header. Your raw IP address is never geolocated by us.
- Path, language, and referrer host. The query string and fragment are removed before storage, and the referrer is stored as a host only, never a full URL.
3.7 Sandbox Session Data
When you use the Sandbox, we keep only ephemeral session metadata in a short-lived in-memory store (Redis): the container id, your user id, the image name, the lesson id, timestamps, and the session deadline. This metadata is bound to a time-to-live and is deleted within minutes of the session ending (the hard limit is 30 minutes, idle sessions free sooner, and a reaper runs frequently).
We do not record the commands you type, your keystrokes, your terminal output, or your shell history. Only aggregate, non-personal resource metrics (for example overall CPU and memory usage across the host) are kept, for capacity and reliability, and are pruned after 7 days.
3.8 Operator and Audit Data
For security and accountability, administrative actions taken by our operators are recorded in an append-only audit log, including the operator's IP address, the acting account, and details of the action. This log covers internal operator activity, not ordinary user browsing.
3.9 Order and Payment Records (Not Active)
Our database contains a structure for orders and payment events, but it is not connected to any live purchase flow, because payments are not live. No card number, expiration, or security code is modeled anywhere. If billing is introduced later, card data would be handled by the payment processor, not by us, and would never be stored by Linuxlab. If billing is introduced later, financial records may be retained as required by applicable tax law, as described in Section 7.
4. How We Use Information
We use the information above for these purposes only:
- To provide the Service: create and authenticate your account, remember your language and reading progress, and run your Sandbox sessions.
- To keep the Service secure: detect and prevent abuse, protect against unauthorized access, and keep the audit log for accountability.
- To communicate with you about your account and to respond to feedback you send.
- To understand and improve usage through first-party, aggregate analytics.
- To comply with law and to enforce our Terms.
We do not use your data to train any model. We do not run any AI model over your data. We do not sell or share your personal information (see Section 8).
Do-Not-Track and Global Privacy Control
We honor both the Do-Not-Track (DNT) browser signal and the Global Privacy Control (GPC) signal. Our website checks these on the client, and our servers independently check the DNT: 1 and Sec-GPC: 1 request headers, and we combine the two. When either signal is present, the analytics record for that page view is fully de-identified: no account link, no visitor pseudonym, and no visitor-keyed counter. We do not perform cross-site behavioral tracking, and we do not allow any other party to conduct cross-site tracking on the Service.
5. Cookies
Linuxlab uses exactly three cookies. All three are first-party and strictly necessary. We do not use any advertising, analytics, or tracking cookies.
| Cookie | Purpose | Flags | Duration |
|---|---|---|---|
ll_session | Authentication session. Holds the opaque session token that keeps you signed in. | HttpOnly; Secure in staging and production; SameSite=Lax; Path=/ | 14 days, sliding; cleared on logout |
ll_locale | Your language preference (ru or en). No personal data, no secret. | HttpOnly=false; Secure on HTTPS; SameSite=Lax; Path=/ | 365 days |
ll_locale_src | A flag recording whether your language was set by a geography guess or by your explicit choice, so an automatic guess never overrides a choice you made. No personal data. | HttpOnly=false; Secure on HTTPS; SameSite=Lax; Path=/ | 365 days |
There is no CSRF cookie and no tracking cookie. Protection against forged requests is done without a cookie. The Sandbox sets no cookies; its connection is authorized by a single-use ticket in the connection URL, not by ll_session.
Because these cookies are limited to authentication and to remembering your language choice, they fall under the "strictly necessary" category and do not require a consent banner. Our cookie notice is informational only. A separate Cookie Policy provides the full detail; please refer to it rather than relying on this summary alone.
Browser local storage (not cookies)
We also use a few keys in your browser's local storage. These are functional and hold no advertising or tracking data:
| Key | Purpose |
|---|---|
ll_theme | Your light or dark interface theme. |
ll_vid | A random analytics visitor id. Suppressed (sent as null) when Do-Not-Track or Global Privacy Control is on. |
ll_cookie_notice | A flag that remembers you dismissed the informational cookie notice. |
ll:lesson-done:<slug> | A per-browser hint marking a completed practice lesson. |
Video embeds
Some pages embed video from youtube-nocookie.com and casts from asciinema.org. These are conditional, playback-only third-party embeds that set cookies only when you actively play the media. YouTube's no-cookie domain defers cookies until you actively play a video. See YouTube's privacy policy (https://policies.google.com/privacy) and asciinema's privacy policy (https://asciinema.org/privacy).
6. Third-Party Processors
We rely on a small number of service providers. We share only what each provider needs to perform its function, and each acts as a service provider or processor for us, not for its own purposes.
| Provider | Purpose | Status | Privacy Policy |
|---|---|---|---|
| Hosting / server infrastructure | Runs our database, cache, application, and the isolated sandbox host | Active (self-hosted) | Our hosting provider |
| CDN / edge provider | Content delivery; supplies coarse country and forwarded-IP headers | Active | Our CDN / edge provider |
| Docker Engine / OCI runtime (self-hosted) | Executes your commands in the sandbox; stores no personal data | Active | Not a third-party processor of stored personal data |
| Google (Sign in with Google) | Optional sign-in: confirms your email address to us when you choose it; acts as your identity provider under its own policy, not as our processor | Active | Google (https://policies.google.com/privacy) |
| Stripe | Non-RUB card processing, if enabled | Not live | Not applicable until enabled |
| YooKassa | RUB card processing, if enabled | Not live | Not applicable until enabled |
| Transactional email provider | Sending verification and reset emails, once wired | Not currently sent | Not applicable until enabled |
| YouTube (youtube-nocookie) / asciinema | Video and cast playback, only when you play media | Conditional embed | YouTube (https://policies.google.com/privacy); asciinema (https://asciinema.org/privacy) |
We do not use any advertising network, analytics-as-a-service provider, or error-monitoring service. Analytics and error counting are first-party.
7. Data Retention
We keep each type of data only as long as it is needed for the purpose it was collected for, or as required by law.
- Session records (including login IP and User-Agent): expire on a 14-day sliding window and are revoked on logout, password reset, or ban.
- Verification and reset tokens: 48 hours (verification) or 2 hours (reset), single use.
- Account data: retained while your account exists. On erasure, the account is marked deleted; you can contact us to request deletion.
- Reading progress: removed together with your account.
- Feedback: on account deletion, your feedback is unlinked from you (the account link is set to null) while the thread is retained no longer than necessary for the purpose described above.
- Analytics page views: stored in monthly partitions and rolled up into de-identified daily aggregates, retained no longer than necessary for the purpose described above.
- De-identified daily aggregates: long-lived; they contain no identifying data.
- Sandbox resource metrics (non-personal): pruned after 7 days.
- Sandbox session metadata (including user id): deleted within minutes of the session ending, at most 30 minutes.
- Order and payment records (not active today): if billing is introduced later, financial records may be retained as required by applicable tax law. On an erasure request, the account link is severed but a required financial record may be kept.
- Audit log: append-only and immutable, retained no longer than necessary for the purpose described above.
8. Your Rights and Choices
We honor the privacy rights described below. Because we collect little data and no sensitive personal information, some rights apply to only a small amount of data.
For everyone
- Access: ask what personal data we hold about you.
- Correction: ask us to correct inaccurate data. You can change your language preference yourself in your account settings.
- Deletion: ask us to delete your account and associated personal data, subject to records we are required to keep by law.
- Portability: ask for a copy of the data you provided, in a portable form.
To exercise any of these, contact us using the feedback form inside your account ("Write from your account"). We may need to verify that a request comes from you before acting on it; for most accounts the only identifier we hold is your email address, which limits what verification is possible.
We do not sell or share your personal information
We do not sell your personal information, and we do not share it for cross-context behavioral advertising, in the meaning of California law. Because this is true, there is no "Do Not Sell or Share My Personal Information" action to take, and we do not provide a non-functional link for one.
See Section 12 for the California-specific supplement and Section 13 for other regions.
9. International Transfers
We operate the Service from the United States, and your personal data is processed in the United States. If you access the Service from outside the United States, you understand that your data is processed in the United States. Data may also transit through other regions as part of normal internet routing.
10. Children's Privacy
The Service is intended for a general audience and is not directed to children under 13. We do not knowingly collect personal data from children under 13. We do not use an age gate, and we do not ask for a birthday.
We do not collect biometric data or government identifiers from anyone. If you believe a child under 13 has provided us with personal data, please contact us and we will delete it promptly.
11. Security
We protect your data with reasonable technical and organizational measures:
- Encryption in transit: the Service is served over HTTPS/TLS.
- Password protection: passwords are stored only as Argon2id hashes; we never store or log them in plain text.
- Session tokens: only a peppered hash of your session token is stored; the raw token stays in your cookie.
- Sandbox isolation: each sandbox session runs in its own container with no internet access and no access to our host, and is destroyed at the end of the session.
- No card data at rest: we do not store card numbers or bank details.
No method of transmission or storage is completely secure, so we cannot guarantee absolute security. If a breach affects your personal data, we will notify you and any authorities as required by applicable law.
12. California Privacy Supplement
This section provides disclosures for California residents. We are almost certainly not a "business" required to comply with the California Consumer Privacy Act as amended, because we are well under its revenue and volume thresholds and we do not sell personal information. We are not claiming to be a covered business; we provide these disclosures voluntarily and honor these rights.
Categories of personal information we collect
| Category (as defined by California law) | Do we collect it? | Examples |
|---|---|---|
| Identifiers | Yes | Email address; login IP address; visitor pseudonym |
| Customer records (Cal. Civ. Code §1798.80) | Limited | Email address; password hash (when set) |
| Protected classifications | No | — |
| Commercial information | Not active | Order records exist only in structure and are not populated today |
| Biometric information | No | — |
| Internet or network activity | Yes | Reading progress; page views; browser and device diagnostics you submit with feedback |
| Geolocation data | Coarse only | Two-letter country from a CDN header; no precise location |
| Sensory data (audio, visual) | No | — |
| Professional or employment information | No | — |
| Education information | No | — |
| Inferences | No | — |
| Sensitive personal information | No | — |
Sources: directly from you (account, feedback), and automatically from your use of the Service (session, analytics).
Business purposes: providing and securing the Service, communicating with you, and first-party analytics, as described in Section 4.
Disclosure to service providers: we disclose limited personal information to the service providers listed in Section 6 for those business purposes only. We do not disclose personal information to third parties for their own purposes.
California rights
You have the right to know, access, delete, and correct your personal information, the right to data portability, and the right not to receive discriminatory treatment for exercising these rights. Because we do not sell or share personal information and do not collect sensitive personal information, the rights to opt out of sale or sharing and to limit the use of sensitive personal information do not apply here.
To submit a request, contact us using the feedback form inside your account ("Write from your account"). For an online-only service, a request through the in-account feedback form is sufficient. You may use an authorized agent to submit a request on your behalf; we may ask the agent for proof of authorization and may ask you to verify your identity.
California "Shine the Light"
We do not share personal information with third parties for their own direct marketing, so there is nothing to request under California Civil Code §1798.83.
Do-Not-Track
As stated in Section 4, we honor Do-Not-Track and Global Privacy Control signals, and we do not conduct or permit cross-site behavioral tracking on the Service.
13. Other Regional Notes
The Service is operated from the United States and directed to users in the United States. We do not target the European Economic Area, the United Kingdom, or the Russian Federation. If you access the Service from outside the United States, you do so on your own initiative and are responsible for compliance with local law.
14. Changes to This Policy
We may update this Privacy Policy from time to time. When we do, we will change the "Last updated" date at the top of this page. If a change is significant, we will provide additional notice, such as an in-product message. Please review this page periodically.
15. Contact
For privacy questions or to exercise your rights, contact:
- In-account: the feedback form ("Write from your account")
- Operator: Automation and Progress LLC
We aim to respond within 30 days.