Licensing Question #24
Labels
No Label
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: getBible/support#24
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Hello,
I created the app OpenBible and have a few questions regarding it.
The application downloads the json files from your website e.g. translations.json and stores them locally on the end users device
/sdcard/Android/data/com.schwegelbin.openbible/files
.This scares me a bit because of following, which I got from your README:
I'm just downloading the json file and have features to update them and check for updates etc., so they should be up to date.
Is it okay to do so?
And now to my main question:
Some translations have copyrighted content like:
Is it allowed to use those translations?
(Looks like AndBible doesn't have any problems using them.)
And do I need to add a "NonFreeNet" Anti-Feature when I upload it to F-Droid or can I remove it from IzzyOnDroid?
TLDR;
Thank you fro your help! Have a great day!
Hello Michi,
Thank you for reaching out and for your interest in the getBible ecosystem. We appreciate your conscientious approach to ensuring that your application, OpenBible, adheres to the guidelines and licensing terms associated with the texts and resources provided through our API.
Local Storage of the JSON Files
It is perfectly fine for your app to download and store the JSON files (e.g., translations.json, chapters.json, etc.) locally on the end user's device. The recommendation in our documentation against hosting the Scripture JSON repository publicly (like on GitHub) is meant to prevent unauthorized or out-of-date “public mirrors” that do not stay in sync with the Crosswire modules. Storing the data locally on the user’s device for offline use is not publicly redistributing the files, so this does not violate our guidelines.
Copyrighted Translations and Licensing
The Bible texts provided through getBible are sourced directly from Crosswire’s modules, each with its own licensing terms. Many are free for non-commercial usage, while others require certain attribution or usage restrictions. Since getBible is simply extending Crosswire’s distribution through a JSON-based front-end, the licensing terms remain the same. If AndBible—or any other Crosswire-based frontend—can legally use these modules, you can do so as well, provided you follow the same terms and respect any attribution and non-commercial clauses.
We recommend reviewing each translation’s license. Adhering to these ensures that you’re aligned with Crosswire’s licensing. getBible’s role as a recognized front-end for the SWORD Project modules (as noted on the Crosswire Wiki: https://wiki.crosswire.org/Frontends:getBible) means that we maintain the same distribution framework and restrictions as Crosswire itself.
Staying in Sync With the getBible API and Crosswire Modules
A core principle of getBible is maintaining synchronization with the Crosswire modules. Each month, we run a three-hour process to update and validate every translation. We use hash values for translations, books, and chapters. When these hash values change, it signals that the underlying text has been updated by Crosswire (e.g., corrections, improvements, or additions).
Why is synchronization important?
Accuracy and Integrity: Changes in hash values mean updated text. By checking these hashes and refreshing your local data accordingly, your application remains accurate and authoritative, reflecting the most recent text sourced from Crosswire.
Respecting the Source: Crosswire is the ultimate “source of truth.” Maintaining sync with their updates ensures you uphold the quality and fidelity of the text, as well as respect their ongoing efforts to keep the Scriptures accurate.
Long-Term Reliability: Users rely on your app for accurate biblical content. Regularly updating based on hash changes enhances user trust and ensures compliance with Crosswire’s and getBible’s standards.
Referencing getBible as the Source
We also encourage you to clearly reference getBible as the source of the API that serves the Crosswire modules. Doing this helps users trace the origin of the content. If anyone inquires about your source or wishes to verify the text’s integrity, they will be guided first to getBible and then, via getBible’s documentation and links, to Crosswire. This creates a transparent chain of trust and attribution. For example, you might include a short note like:
This not only clarifies where the data originates but also showcases that you are part of an established, reputable network of Bible distribution efforts. Additionally, the https://getBible.net website itself serves as a live proof-of-concept and demonstration of how the API works, providing further confidence and transparency for your users.
Joomla
You know that all the features of the getBible (Bibles) is a Joomla Component and can be added to any website, right? Which means any Joomla website can work and behave like getBible's own Bibles, like you see on this website.
NonFreeNet Anti-Feature (F-Droid Considerations)
The NonFreeNet anti-feature depends on F-Droid’s policies. Since getBible and Crosswire’s modules are generally considered open and free for non-commercial use—albeit with specific licensing clauses in some translations—this may not qualify as a “non-free” network service in the traditional sense. However, to be certain, please review F-Droid’s guidelines or consult with them directly. Transparency and proper attribution typically help avoid confusion regarding anti-features.
Conclusion
By incorporating periodic synchronization based on the hash values, respecting licensing conditions, and acknowledging getBible as your data source, you ensure accuracy, legality, and trustworthiness. The chain from your app to getBible to Crosswire is well-established and recognized, as evidenced by the listing on the Crosswire Wiki (https://wiki.crosswire.org/Frontends:getBible) and the operational demonstration on https://getBible.net.
We appreciate your diligence, and please feel free to reach out if you have any additional questions or concerns.
Have a great day!
Open getbible.net to see a hash value beneath the Scripture, with a question mark, then open the link to see the full explanation. This new system will keep all websites that use this system in-sync with the CrossWire modules, which is a massive achievement for CrossWire and the whole online Bible world.
This is the real issue: you must keep your data in sync with the getBible API, as stated:
Doing so will ensure that CrossWire and the upstream publishers remain satisfied.
Believe me, the path we took to establish this solution was lengthy and challenging. If we count only my own efforts, I began in 2016, and we finally reached a complete solution in 2021. Since then, the system has been stable.
So, when you read:
This is not an exaggeration, but a true reflection of the getBible team's commitment to doing things the right way and finally succeeding after many years of difficulty.
Hello Llewellyn,
thank you very much for your fast response and detailed explanation!
You have answered a lot of my questions.
For the NonFreeNet Anti-Feature, I will reach out again to F-Droid and IzzyOnDroid and quote your response to it; I hope, this is okay.
I also added the reference to the getbible docs in the readme and app.
Regarding the synchronization, I already had a basic system to download the translations together with the checksums, update them by comparing it to the checksum of the index etc..
(By index I mean translations.json and checksum.json)
But I improved it by downloading the index at the app startup and by checking for updates after it, so that the user can update (or skip if they don't wanna waste their mobile data) their translations.
Is this system okay?
And I looked at the licenses again:
Most of them are fine, but I'm unsure about 2, 5 and 6.
Am I even distributing them, maybe I'm too careful?
Have a great day!
These specific license terms:
are precisely why it’s important to maintain synchronization with CrossWire. By keeping your data aligned with the original SWORD modules through the getBible API, you ensure that you remain within the scope of these permissions. In other words, preserving the link to CrossWire and the SWORD ecosystem helps protect both the CrossWire project’s reputation and its relationships with publishers.
Regarding user updates, allowing users to skip an update occasionally is acceptable. However, the application should continually prompt for the update later or re-attempt it at another time. The goal is to ensure that updates eventually occur to preserve the integrity and legality of your distribution.
To minimize data usage, we recommend leveraging the checksum files at different levels to identify changes efficiently. For example:
Top-Level Checksum (translations):
Start with the main checksum file at:
https://api.getbible.net/v2/checksum.json
This file is small and will tell you if any translation has changed.
Translation-Level Checksum:
If a specific translation (e.g.,
kjv
) has changed, you can then fetch:https://api.getbible.net/v2/kjv/checksum.json
This file details checksums for each book within that translation. If only one book is updated, there’s no need to re-download the entire translation.
download just one book:
https://api.getbible.net/v2/kjv/4.json
Book-Level Checksum:
If the changed book is identified as, say, book
4
of thekjv
, you can then retrieve:https://api.getbible.net/v2/kjv/4/checksum.json
This will show which specific chapter(s) changed. From there, you only need to download the updated chapter(s), reducing unnecessary data usage.
download just one chapter:
https://api.getbible.net/v2/kjv/4/2.json
For minor updates or when a whole translation is updated, it might be simpler just to download the entire translation. The key point is that you have options, and the approach you choose can optimize both data usage and user experience.
To accommodate varying user preferences, you might delay updates until the user is on Wi-Fi, or schedule them during times the app is in active use. The critical point is that updates must eventually take place to maintain compliance and accuracy.
For translations without explicit synchronization requirements, such as those listed in:
https://git.vdm.dev/getBible/v2_builder/src/branch/staging/conf/PublicDomainBibles.json
maintaining sync is still considered best practice, but may be less urgent.
In short, while you have flexibility in how you handle updates, ensuring that they eventually occur is crucial for staying within licensing terms, maintaining the chain of trust, and preserving the authoritative status of the texts.
As a side note, in our GetBible Joomla application, we don’t run cron jobs or scheduled tasks to continuously update translations. Instead, we use an on-demand approach tied to user actions. Here’s how it works:
This approach means that only chapters that users actually read get updated. On a busy website with many visitors viewing different chapters, updates occur more frequently across various parts of the database. In a single-user app environment, you only need to update what the user looks at, making this on-demand system highly efficient.
For reference, here’s an example of a chapter hash file:
https://api.getbible.net/v2/kjv/4/2.sha
Our on-demand method not only manages updates and synchronization but also serves as the primary way we load Bible content in the first place. Instead of downloading an entire translation upfront, we begin with the first chapter a user opens. As that chapter loads, we also prefetch the chapter before it and the one after it, ensuring that there are always three chapters available. If the user is at the very beginning of a book, the system intelligently fetches the preceding book's last chapter as well. This approach keeps navigation smooth and responsive: when the user pages to a chapter that’s already cached, we simply fetch the next chapter in the background.
While we don’t rely on traditional cron jobs, our server-side processes run continuously on-demand, updating chapters as the user scrolls. This creates a seamless reading experience—most users never realize that updates and downloads are happening behind the scenes. The same principle could be applied to a desktop or mobile application, significantly reducing data usage by only fetching what’s needed, when it’s needed.
The only time we recommend a full translation download is when the search feature is required. Since searching efficiently across an entire book or translation demands having that data locally available (we are working on a search API in version-3 of the new API to resolve this :), our Joomla backend includes an option to install the full translation. Although the system can still operate using the incremental method without a full installation, a complete local copy enhances search performance and user satisfaction.
Over time, we’ve tested many methods, and this incremental, demand-driven loading and updating strategy has proven to be both the most convenient and the least intrusive. It provides a fast, snappy user experience, keeps data transfers minimal, and maintains smooth navigation throughout the Scriptures.
Hey,
I didn't know about the book level checksums and updates.
I'll try to improve my app regarding the synchronization and in general.
Thank you very much for your explanation!
Right now, it checks for updates at the app startup, when the last update was over a day ago, and lets the user choose wether to update and if they choose to skip it, they are asked again at the next startup. This ensures that the user knows, when he uses an out of date translation.
For now I'm only capable of managing the whole translation at once, but I'll see what I can do.
Thank you very much again!
I'm closing this issue, because I don't have any more questions and your help was more than enough.
Have a great day!
Glory to the Lord!