This webpage contains personal information about me, including who I am and what I do, as well as information regarding my policies and practices, such as software-development practices.
I am Jake Winters, also known by my pseudonym "Inference", a computer-science researcher focussing on security, based in Durham, United Kingdom.
I am the founder, lead developer, and administrator, of Inferencium.
All opinions are my own, and are not necessarily shared with projects or people I am affiliated with.
I write about my research and experiences in security. Most of my postings are security-related, but I occasionally post about other aspects of life.
I am an open-source advocate for the preservation and modifiability of source code. I believe source code should be considered human knowledge as much as past knowledge and teachings were; it is how modern humanity survives and runs. Source code being modifiable allows it to be adapted for use by anyone, whether to add features, harden it for increased security and/or privacy, or provide accessibility for disabled users.
I am also a modular-design advocate for the ability to securely and robustly make changes to hardware and software without the entire system being affected.
I run multiple SimpleX groups and channels; a directory of groups and channels can be found on the Directory webpage.
If you wish to contact me for any reason, you can find my contact methods on the Contact webpage.
Yes. Most of what I watch is anime, and a lot of what I read is manga. I love the anime art style; all of my avatars/profile-pictures are anime-style, reflecting this.
I mostly enjoy electronic dance music (EDM), but I also enjoy other genres, dependent on the music. For a curated list of music I enjoy, visit the Music webpage.
For information about my political opinions and affiliations, visit the Politics webpage.
I am not religious in the supernatural sense and do not believe in the existence of a god or similar entities. For more information about my religious affiliations, visit the Religion section of the Politics webpage.
No. If code is not released under an open-source license and places restrictions on how the code may be used, it is either source-available (if viewing the code is permitted) or proprietary. "Free software" only causes confusion and exists to push an ideology by a specific group of people. If software isn't "free", it's not open-source, either.
You can find me also on the following third-party services:
All dates and times across my services are
ISO 8601-compliant.
The short-form format YYYY-MM-DD is used for dates, and hh:mm:ss is used
for times, with display of seconds being based on required level of accuracy. The full expression
may be used when necessary; YYYYMMDDThhmmssZ (UTC without offset),
YYYYMMDDThhmmss+hhmm (with positive offset), or YYYYMMDDThhmmss-hhmm (with
negative offset).
The following markup languages are used in my code, with rationale provided for the usage of each language.
Note that derivations of non-Inferencium codebases, such as forks, may not contain the markup languages listed here due to the work involved in replacing all code, but will be rewritten whenever possible, and new code will be written in my preferred languages whenever possible.
XHTML is preferred for most content due to its HTML-based design and syntax, with advantages over HTML, including strict parsing checks which assist with achieving code-correctness, and being XML-compliant to allow widespread usage even outside of the intended HTML-based use case.
HTML has multiple flaws, including allowing broken code to be loaded in the user's web browser, not informing the developer of broken code or mismatching tags, and using non-standard, highly-permissive syntax which is non-portable. XHTML mitigates or completely fixes these issues via its XML namespace.
AsciiDoc is used when portability is a concern, as it allows easy conversion to other file formats, including HTML and PDF. AsciiDoc can also be read as-is, due to it having clean markup and high readability when viewed as plaintext.
The following programming languages are used in my code, with rationale provided for the usage of each language.
Note that derivations of non-Inferencium codebases, such as forks, may not contain the programming languages listed here due to the work involved in replacing all code, but will be rewritten whenever possible, and new code will be written in my preferred languages whenever possible.
Rust is a multi-paradigm programming language with a focus on security and performance.
It has strict compile-time checks to verify the memory-safety and thread-safety of code, is memory-efficient, has no garbage collection, is highly portable, has great support for integration with other languages, and is suitable for both high-level and low-level code.
Rust will be used when the code must be compiled into a binary and/or the performance of the code is critical.
I care about upstreaming and sharing code, strongly preferring licences which have high licence compatibility in order to permit sharing code with as many other projects as possible; for this reason, permissive licences are my preferred choice, while avoiding copyleft licences and other licences which place restrictions on how my code may be used, and prevent me from including important proprietary code, such as firmware, which can patch security vulnerabilities, privacy issues, and stability issues.
All of my code is and will be permissively-licensed unless specific circumstances make it impractical or infeasible to do so. My goal is to share code which has the least amount of restrictions as possible, to allow wider propagation of my code and allow more use cases and possibilities, as well as ensuring proprietary code, whenever required, is permitted to be included and/or linked to.
ISO 5962:2021
is used for licensing, in the format
SPDX-License-Identifier: <licence>; see the
SPDX License List
for the full list of available licences under this
standard.
My preferred licences and rationale for using them are below; any licences not listed are chosen on a case-by-case basis.
I encourage people to share my code, and create derivatives of my code for their own needs and circumstances. I explictly permit these actions via the unrestrictive licences I use.
SPDX License Identifier: MIT
Type: Permissive
MIT License is a highly-permissive licence which allows content licensed under it to be used in any way, whether in source or binary form, and allows sublicensing under a different licence, with the only restrictions being the original copyright notice must be kept in order to attribute the original creator of the licenced content.
As branding is a separate issue to content licensing, this licence superseded BSD 3-Clause License on 2025-12-05 in order to simplify licensing.
SPDX License Identifier: BSD-3-Clause
Type: Permissive
BSD 3-Clause License is a highly-permissive licence which allows content licensed under it to be used in any way, whether in source or binary form, and allows sublicensing under a different licence, with the only restrictions being the original copyright notice must be kept in order to attribute the original creator of the licenced content, and the name of the project and/or its contributors may not be used to endorse or promote products derived from the original project.
This licence was superseded by MIT License on 2025-12-05.
SPDX License Identifier: GPL-2.0-only
Type: Copyleft
GNU General Public License v2.0
is a strong-copyleft licence which restricts use of content licenced under it by
requiring all source code of the content to be publicly available, making
binary-only form and inclusion of proprietary code impossible, requiring all
derivatives to be licenced under the same license (allowing sublicensing under only
newer GPL licenses if GPL-2.0-or-later is specified in the SPDX License
Identifier), and requiring the original copyright notice to be kept in order to
attribute the original creator of the licenced content.
Due to the restrictive and invasive nature of this licence, it is avoided unless such restrictions would be beneficial to my code; whenever this is the case, the GNU General Public License v2.0 will be used, rather than the more restrictive GNU General Public License v3.0, and relicensing derivatives under the GNU General Public License v3.0 will be disallowed.
SPDX License Identifier: CC-BY-4.0
Type: Permissive
Creative Commons Attribution 4.0 International is a highly-permissive licence which allows content licenced under it to be used in any way, in any medium, with the only restriction being the original copyright notice must be kept in order to attribute the original creator of the licenced content.
All code uses Semantic Versioning. The numbering scheme is divided into 3 blocks (herein referred to as Block 0, Block 1, and Block 2, in left-to-right order); the version blocks are separated by periods. When a version number block is incremented, all blocks to the right of it are reset to 0. The legacy versioning scheme was a similar numerical versioning scheme which lacked standardisation.
Block 0 contains the MAJOR version; this number is incremented
whenever an API-incompatible change is made to the code.
Block 1 contains the MINOR version; this number is incremented
whenever an API-compatible, substantial change is made to the code, such as adding a
feature.
Block 2 contains the PATCH version; this number is incremented
whenever an API-compatible, unsubstantial change is made to the code, such as fixing or
optimising the code.
Development and pre-release versions are suffixed with a hyphen, followed by their phase,
a period, then the version of that phase; for example, -alpha.n for
an alpha version, -beta.n for a beta version, and
-rc.n for a release candidate version, with
n being a positive integer beginning at 1. Stable versions have no
suffix.
There are 4 phases of development. Each phase typically has its own branch in each source code repository. The phases are as follows:
When development of a new version has begun, the code within the alpha phase is rebased onto the most recent code from the stable phase before work commences. This cycle continues for the lifetime of the code.
My code is managed via Git, a popular, battle-tested version-control system used by almost all other developers and projects, including Linux.
My web-based Git management is performed via Gitea, an all-in-one development platform with Git hosting, code review, team collaboration, package registry and CI/CD.
All of my code is developed openly on my Gitea server.
All commits use Conventional Commits, a standardised specification for writing commit messages and descriptions. Each commit begins with its type, from the following list:
fix: A fix added via the commit; equivalent to a
PATCH version increasefeat: A feature added via the commit; equivalent to a
MINOR version increaseadd: A new file added to the codebase via the commitupdate: A file in the codebase updated by overwriting the file via
the commitrebase: A file in the codebase rebased from the previous version to
another version by overwriting the file via the commitFollowing the type is the scope, which is omitted in the case of multiple scopes being modified via the commit. The scopes used vary by project; consult each project's source-code repository for their specific scope declarations.
In the case of a breaking-change, ! is suffixed to the type or scope; whichever is
last; and a description of the breaking-change will be included in the commit description. A
breaking-change is equivalent to a MAJOR version increase.
The final component of the commit message is :, followed by a space and a string
explaining the changes made via the commit. There may also be a commit description, if more
information than only the commit message is required to understand the commit; the commit
description is mandatory in the case of a breaking-change.
Conventional Commits works alongside Semantic Versioning to provide a clear, semantic overview of changes being made to the codebase, and allows for easy automation of changelogs due to the relationship between the two specifications.
This list contains the policies and practices of my services.
My policies and practices are heavily security-focused and privacy-focused, with improvements made on an ongoing basis as new technologies, hardware, software, and protocols become available.