From 266d21d49263b39800f8f992a0b9fa499aab4c9c Mon Sep 17 00:00:00 2001 From: Barijaona Ramaholimihaso Date: Thu, 5 Feb 2026 20:06:17 +0300 Subject: [PATCH] Add policy about "AI" usage Needed to: - avoid a possible deterioration in the working conditions of maintainers and their relationships with future contributors, - make clear that maintainers have long been acquainted with heuristics and "fuzzy logic", but this has not led them to believe that machines have become "intelligent". Follow-up of discussion #2051 --- LLM-USAGE-POLICY.md | 23 +++++++++++++++++++++++ README.md | 2 ++ Vienna.xcodeproj/project.pbxproj | 4 ++++ 3 files changed, 29 insertions(+) create mode 100644 LLM-USAGE-POLICY.md diff --git a/LLM-USAGE-POLICY.md b/LLM-USAGE-POLICY.md new file mode 100644 index 00000000..cb7af33c --- /dev/null +++ b/LLM-USAGE-POLICY.md @@ -0,0 +1,23 @@ +# "AI" Usage Policy + +**Foreword on terminology:** What is called "AI" nowadays actually refers to the family of large language models (LLM), which are tools based on fuzzy logic and generalized statistical interpolation. Despite the marketing hype, we will avoid the term "AI" here and stick to "LLM", as we think it is wise to keep in mind the nature of these tools and not attribute to them any capacity that might exceed their inherent design. + +The Vienna team fully acknowledge that the history of software development has been marked by the introduction of increasingly sophisticated automated tools. We also recognize that heuristic tools based on LLMs have shown real potential to automate certain software development tasks. While keeping in mind the environmental costs of LLMs and some legal and ethical questions around how they were trained, we are therefore open to welcome work based on LLMs here. + +However, please remember that Vienna is maintained by a community of humans. + +A community of humans who write code by hand, little by little, like masons building a wall brick by brick. If part of the software is defective, then we can modify it, correct it or replace it. A human who does not like a particular feature will fill out an "issue" to suggest a change. And someone who is already working on the project will look at this "issue", try to understand what the person wants, and see if it makes sense. The author of the "issue" can also propose an alternative piece of code that could meet his need, such as “replace your code with this one, it solves the problem.” This is how we build at the same time better software and a community of contributors. + +Thus, every discussion, issue, and pull request is read and reviewed by humans (and sometimes also by machines). This is a demarcation point where people interact with each other and where work is done. LLMs can help in writing code or describing an issue, but they are not suited to replace these interactions. + +In a perfect world, LLMs would produce high-quality, accurate work every time. But today, that reality depends on the pilot of the LLM. And today, many pilots are simply not good enough. Using LLMs to generate code or issues without human quality control and effort is burdensome for maintainers and can be disrespectful of the spare time they invest in the project. So, until either people get better at them, or the LLMs improve, or both, we must implement strict rules to protect maintainers. + +Issues, discussions and translations can use LLM assistance but must have a full human-in-the-loop. This means that any content generated with LLMs must be reviewed by a human before submission. We value brevity and conciseness; therefore, if an LLM generates overly verbose contributions with superfluous elements that could distract from the main topic, those must be trimmed down. + +Pull requests created by LLMs must be clearly disclosed as such and can only be submitted in response to existing, accepted issues. Pull requests that do not refer to an accepted issue will be closed. If you want to share code for a non-accepted issue, open a discussion or attach it to an existing one. If the use of an LLM is not disclosed but a maintainer suspects its use, the PR will be closed. + +Pull requests created by LLMs must have been fully verified by a human. LLMs must not create hypothetically correct code that hasn't been read and tested by a human. Crucially, you must not allow LLMs to create code for environments or situations that you are unable to manually test. + +We love helping developers learn and improve, and hope to continue doing so without wasting our time arguing with an LLM. **Bad "AI" pilots will be banned and might be called out in public. You've been warned.** + +Due to potential copyright issues, only very simple multimedia elements (graphics, sounds etc.) generated by LLM will be accepted. In all cases, the contributor must ensure that they hold an appropriate copyright for any submitted media. \ No newline at end of file diff --git a/README.md b/README.md index 5f5b6184..d48b1bf3 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,8 @@ Contributing Want to contribute? Great! There are many ways you can, even if you aren't a developer. +This project has strict rules regarding usage of so-called "AI". Please see the [LLM usage policy](LLM-USAGE-POLICY.md). + ### Writing code Please check [CONTRIBUTING.md](CONTRIBUTING.md). diff --git a/Vienna.xcodeproj/project.pbxproj b/Vienna.xcodeproj/project.pbxproj index a38d4011..ed89acd6 100644 --- a/Vienna.xcodeproj/project.pbxproj +++ b/Vienna.xcodeproj/project.pbxproj @@ -100,6 +100,7 @@ 3A7BD0DD1989AC7700E9444B /* VNAVerticallyCenteredTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7BD0DC1989AC7700E9444B /* VNAVerticallyCenteredTextFieldCell.m */; }; 3A8D9AE325A9DA4B0016F30F /* ArticleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8D9AE225A9DA4B0016F30F /* ArticleTests.swift */; }; 3AA9880E2F2159CD0035B027 /* AppIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = 3AA9880D2F2159CD0035B027 /* AppIcon.icon */; }; + 3AA988102F34F3E40035B027 /* LLM-USAGE-POLICY.md in Resources */ = {isa = PBXBuildFile; fileRef = 3AA9880F2F34F3E40035B027 /* LLM-USAGE-POLICY.md */; }; 3AB95743258DBC5A00C54E83 /* Browser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FDF6FC5218A26B0002F77E9 /* Browser.swift */; }; 3AC411A526BBFDFD004A8700 /* WebKitArticleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC411A426BBFDFD004A8700 /* WebKitArticleView.swift */; }; 435026E6165DD8BE0018EDB7 /* ArticleRef.m in Sources */ = {isa = PBXBuildFile; fileRef = 435026E5165DD8BE0018EDB7 /* ArticleRef.m */; }; @@ -382,6 +383,7 @@ 3A932D8823BB999A009B8061 /* Vienna.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Vienna.entitlements; sourceTree = ""; }; 3A932D8923BB999A009B8061 /* ViennaDeployment.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = ViennaDeployment.entitlements; sourceTree = ""; }; 3AA9880D2F2159CD0035B027 /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = ""; }; + 3AA9880F2F34F3E40035B027 /* LLM-USAGE-POLICY.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = "LLM-USAGE-POLICY.md"; sourceTree = ""; }; 3AC411A426BBFDFD004A8700 /* WebKitArticleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebKitArticleView.swift; sourceTree = ""; }; 3ADBA70C23DDAFCA00156722 /* Notarize.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = Notarize.sh; sourceTree = ""; }; 3AF674562E2239EB00955D05 /* CreateDMG.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = CreateDMG.sh; sourceTree = ""; }; @@ -893,6 +895,7 @@ 439824231666B3DB00FFE219 /* README.md */, F6BD1FDD2C9D7E2E0075D04F /* LICENCE.md */, F6BD1FDC2C9D7E230075D04F /* CONTRIBUTING.md */, + 3AA9880F2F34F3E40035B027 /* LLM-USAGE-POLICY.md */, ); name = Documentation; sourceTree = ""; @@ -1644,6 +1647,7 @@ F6D572BA1E26AAA900CDA909 /* SearchFolder.xib in Resources */, F626F5F424A76B9100D3AAD8 /* Preferences.storyboard in Resources */, F6209C5A23D3FFA700D5537D /* Vienna.sdef in Resources */, + 3AA988102F34F3E40035B027 /* LLM-USAGE-POLICY.md in Resources */, F63C08F02C4A70AA0095BAD7 /* Localizable.xcstrings in Resources */, ); runOnlyForDeploymentPostprocessing = 0;