Edge cases in free software.
Luis Guzmán@Ark74
at
https://gitlab.trisquel.org/trisquel/package-helpers/-/issues/177
typed
Please keep the discussion going on the forum, as there would be more elaborated responses there.
I would like to point out 2 main ideas,
AFAICT, Trisquel doesn't ship any driver that could run CUDA instructions, so in a practical sense, cuda code is not supported at distro level.
There is free software written in C#, Mono, .Net, etc. so, there might be a gray area around those, IIRC if such software is possible to compile / run using free tools, even when written on a trap language, it is considered free software, as the licence is stated.
It's my personal opinion that having the project oficial website on the package details, and calling that "steer users" to obtain non-free practical information is stretching the definition a bit too far.
Anyway, this is an example of how edge topics can quickly become long winded discussions, that are better suited for the forums as those require more people involved and the forums have a much higher participation ratio.
I've mentioned before issues are more effective to track errors, MR, or collaborate to build a fix on a well defined problem.
Regards
So I'm posting this to keep the discussion going on the forum, as edge topics may be best typed about on the forum.
Also thank you Luis Guzmán@Ark74
on the issues for telling me how Trisquel doesn't ship any driver that could run CUDA instructions, as I did not know if these were part of the language, supporting the language, or how these were or could be in anyway linked under some licenses.
I do not know how things like the Linux-libre or deblobed Linux kernel boot up even if a machine uses a non-free bios, though somehow those are seperate programs, even though the bios could change how a program runs.
And I see how an official website of a project is not like Trisquel doing any steering users to non-free things.
As upstream Linux, the kernel as that is not Gnu/Linux the OS, also has binary blobs, but Trisquel tries hard to remove binary blobs and other non-free licensed from upstream things.
So even if upstream has blobs or non-free things, Trisquel tries to remove things like that.
I see how this could be an edge case or gray area, as I do not know how things link together, or are used in a legal sense.
I only see that some things run or link in a programming sense.
So it is likely programmers that are also laywers could know how things like this, or the bios to bootup, can be done without really making one program.
I'm not a laywer or that skilled a programmer, so I do not know much about how linking clauses in the GPL work.
I only see that things like GCC can make source code compiled to run, but do not know much about how things actually may connect to each other.
Searching online for "You Only Look Once" "Darknet program" or "Joseph Redmon" could show more Darknet forks, but the ones I found also had CUDA as shown by grep.
Also I did not check those for other problems like backdoors, spyware, and the like. Or check the main Darknet repository for problems.
Main I think is at
https://github.com/pjreddie/darknet.git
Other_people's_forks I found
https://github.com/AlexeyAB/darknet
https://github.com/hank-ai/darknet
So if the main or first developer is not working on it maybe someone else is.
Though that may not be the darknet program of apt-get source
on Trisquel.
I do not know the best/fastest way to edit out the CUDA from Darknet, but thank you for the help Jason Self @jxself , and Luis Guzmán @Ark74 on the issues area for more information about this issue.
https://gitlab.trisquel.org/trisquel/package-helpers/-/issues/177
I see there is a way to build things with apt-get -b source
form
https://trisquel.info/en/forum/minetest-may-not-build#comment-175568
But I do not yet know the best way to deblob/remove_cuda from Darknet and get it into Trisquel's Darknet / a .deb package of Darknet for Trisquel.
I was not trying to earn gnu-bucks
https://www.gnu.org/help/gnu-bucks.html
I was just trying to file a detailed and actionable bug report
as shown by that page, to help Trisquel by trying to
include the following:
Which version of the distribution you found the problem in. Please note that if the problem has already been fixed, we cannot provide a reward for it, since the report is no longer actionable.
A list of file(s) which do not meet the guidelines.
A list of package(s) that include these file(s), if appropriate for this distribution.
An explanation of why the files do not meet our guidelines. For example, if the files are distributed under a nonfree license, say which license that is, along with a reference to the license text and information to illustrate that it applies to them.
Though that page did show I may send a report to
http://trisquel.info/en/project/issues
instead of
https://gitlab.trisquel.org/groups/trisquel/-/issues is the correct place to report issues.
http://trisquel.info/en/project/issues was the correct place to report issues, but is disused.
In the issue report, you mention that Using grep -r cuda in a terminal also shows more CUDA things. What are these "CUDA things"?
Typing
apt-get source darknet
cd darknet-0.0.0+git20180914.61c9d02e
grep -ri CUDA
or using grep -ri CUDA > Cuda_things in that folder shows about 713 lines in the output of grep in the text file that is made with the redirect > showing the word/string CUDA in some way.
Some of these may be in the cuda.c and the cuda.h files, but others are in files like .cu or even files that do not end in .cu.
CUDA I saw on Wikipedia at https://en.wikipedia.org/wiki/CUDA
that page shows the license may be proprietary.
https://gitlab.trisquel.org/trisquel/package-helpers/-/issues/177#note_12336
Is a post by Jason Self that shows CUDA-specific code may be a dependency in Darknet. And in part that post shows
"Dependencies may be necessary for the program to run at all, or they may be necessary only for certain features. Either way, all or part of the program cannot operate without the dependencies."
https://www.gnu.org/philosophy/java-trap.en.html
may have more information about these kind of things.
Though I also saw how minetest may use "bundled" dependencies in-case some dependencies are not present on the system it is being compiled on.
I do not yet know if CUDA is bundled, linked, part of the language, or something else in Darknet.
Though thankfully I do not see CUDA in the minetest Trisquel uses, the minetest-5.4.1+repack.
wget https://github.com/minetest/minetest/archive/5.4.1.tar.gz
has
minetest-5.4.1$ grep -ri CUDa
po/tr/minetest.po:"Devam ederseniz, kimlik bilgilerinizi kullanarak yeni bir hesap bu sunucuda "
po/tr/minetest.po:"Bu, sunucuda \"hayalet\" yetkisi gerektirir."
po/tr/minetest.po:"Bu, sunucuda \"uçma\" yetkisi gerektirir."
po/tr/minetest.po:msgstr "Sunucudan alınan harita kaydediliyor"
lib/jsoncpp/json/json.h:// Workaround for bug in the NVIDIAs CUDA 9.1 nvcc compiler
So I think only the last one is a workaround for or with CUDA, but
wget https://github.com/minetest/minetest/archive/$5.8.0.tar.gz
shows
lib/jsoncpp/json/json.h:// Workaround for bug in the NVIDIAs CUDA 9.1 nvcc compiler
lib/catch2/catch.hpp:#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__)
lib/catch2/catch.hpp:# if !defined(__ibmxl__) && !defined(__CUDACC__)
Though I do not know if CUDACC is part of the CUDA that is being typed about in Darknet or something just named CUDACC.
I do not yet know how these CUDA things are being used, if at all, or compiled into the Darknet of Trisquel.
"That said, seems like the most affordable option is to remove the (unsupported) CUDA code."
https://gitlab.trisquel.org/trisquel/package-helpers/-/issues/177#note_12337
Is this what you are trying to do? If you can remove those "CUDA things" and compile, the situation would indeed be cleaner. Some of them may only be needed for darknet to run without CUDA, though, as would be for example an "if" statement testing whether CUDACC is defined, or watnot.
"Unsupported" implies that there is no non-free code running on Trisquel from darknet, as long as you stick to the Trisquel repo. The darknet package description in Trisquel could make it clear that it can run without CUDA, though. Not mentioning CUDA at all may only add to confusion, unless darknet is removed altogether, which would probably be overshoot.
I was looking into removing the CUDA code from darknet, though the Trisquel developers may know how to remove these faster or cleaner than me.
Though I do not know if I should use apt-get source darknet or some git commit to see if the CUDA code in some things like in-between brackets after words like float, int, void, and other things that may be like functions that can be removed and still have Darknet compile.
Cuda also shows in things like cudaThreadSynchronize(); on line 232 of the gemm.c file, as well as other cuda things in other places.
I mostly looked at code like the minetest game before, so I know more about making node/game_block types of things and sword/pickaxes in that game than using/making functions in some languages, as I think the minetest game is interpreted lua code, and not compiled, or just in time compiled.
If I type make in both the apt one and the git one after removing just the cuda.c and cuda.h files I see
darknet-0.0.0+git20180914.61c9d02e$ make
mkdir -p obj
mkdir -p backup
mkdir -p results
gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/gemm.c -o obj/gemm.o
./src/gemm.c:3:10: fatal error: cuda.h: No such file or directory
3 | #include "cuda.h"
| ^~~~~~~~
compilation terminated.
make: *** [Makefile:89: obj/gemm.o] Error 1
If I remove the
#include "cuda.h"
from the gemm.c
file than type make in the top folder of darknet-0.0.0+git20180914.61c9d02e I see something like
darknet-0.0.0+git20180914.61c9d02e$ make
mkdir -p obj
mkdir -p backup
mkdir -p results
gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/gemm.c -o obj/gemm.o
gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/utils.c -o obj/utils.o
make: *** No rule to make target 'obj/cuda.o', needed by 'libdarknet.so'. Stop.
Though I did not yet try to remove all the cuda things in all of darknet. So I do not know if this will or will not compile without cuda parts/code yet.
Do you, or does anyone else, think it would be better to test make in the apt-get source darknet or is there a git repository commit for the Darknet that Trisquel uses?
I think I heard of git diff before, though I do not know about making patches/diffs with git yet, as I mostly used git to to just keep track of some files I made before, but not to share/push code around.
I think CUDACC is not in Darknet but in some git upstream commits of minetest's git repository, but not the minetest-5.4.1+repack Trisquel uses.
I was just thinking about how Minetest may use bundled dependencies in-case Darknet also did that with CUDA dependencies.
I was testing make with both the f6afaabcdf85f77e7aff2ec55c020c0e297c77f9 SHA1 ID git commit in https://github.com/pjreddie/darknet.git as well as the apt-get source for Darknet that Trisquel uses, though I do not know if the git is the same code commit as the code that I got with apt-get, as it could also be later code.
I think testing with both the apt-get and a git repository can work, but with a git one I think keeping the code cleaner when testing, as well as going back in-case I deleted something that I should put back could be more easy with gitk. It may also help with however git pulls or diffs or patches are done.
In the apt-get download darknet
I see
grep -ri cuda
grep: darknet_0.0.0+git20180914.61c9d02e-2build4_amd64.deb: binary file matches
and after I extract here and use cd darknet_0.0.0+git20180914.61c9d02e-2build4_amd64
Than
grep -ri cuda
DEBIAN/control: Darknet is an open source neural network framework written in C and CUDA.
grep: usr/lib/darknet/libdarknet.so: binary file matches
usr/lib/darknet/include/darknet.h: #include "cuda_runtime.h"
usr/lib/darknet/include/darknet.h:void cuda_set_device(int n);
usr/lib/darknet/include/darknet.h:void cuda_free(float *x_gpu);
usr/lib/darknet/include/darknet.h:float *cuda_make_array(float *x, size_t n);
usr/lib/darknet/include/darknet.h:void cuda_pull_array(float *x_gpu, float *x, size_t n);
usr/lib/darknet/include/darknet.h:float cuda_mag_array(float *x_gpu, size_t n);
usr/lib/darknet/include/darknet.h:void cuda_push_array(float *x_gpu, float *x, size_t n);
usr/share/darknet/data/imagenet.shortnames.list:great barracuda
usr/share/darknet/data/imagenet.shortnames.list:barracuda
usr/share/darknet/data/9k.names:barracuda
usr/share/darknet/data/9k.names:great barracuda
usr/share/doc/darknet/README.md:Darknet is an open source neural network framework written in C and CUDA. It is fast, easy to install, and supports CPU and GPU computation.
Though that is when using the apt-get download darknet
without trying to compile it without cuda, just getting the darknet_0.0.0+git20180914.61c9d02e-2build4_amd64.deb file with apt-get download darknet.
I was looking into removing the CUDA code from darknet, though the Trisquel developers may know how to remove these faster or cleaner than me.
They certainly compile Darknet without the support for CUDA. It is the default upstream: https://pjreddie.com/darknet/install/#cuda
Letting the GPU variable defined as 0, the C preprocessor removes the instructions requiring CUDA. They are not compiled. Removing them by hand would not alter the compiled code. So, what is the point?
I saw Jason Self on the issues page show at
https://gitlab.trisquel.org/trisquel/package-helpers/-/issues/177#note_12336
Darknet can be seen as "free but shackled," similar to the concept described in "The Java Trap" by Richard Stallman at https://www.gnu.org/philosophy/java-trap.en.html. A program doesn't have to be 100% shackled for this to apply, as "Dependencies may be necessary for the program to run at all, or they may be necessary only for certain features. Either way, all or part of the program cannot operate without the dependencies."
If removing Darknet is not preferred, here are some ideas that could also address this issue:
Remove CUDA-Specific Code: One option could be to remove the CUDA-specific code from Darknet. This would ensure that the software doesn't have any proprietary dependencies.
Use a CUDA Compatibility Layer: Tools like HIPIFY can automatically convert CUDA code to HIP, allowing Darknet to run under ROCm. This process might require manual adjustments and can be more complex. Alternatively, an OpenCL wrapper could be considered, though this might introduce other complexities.
Directly modify Darknet for OpenCL or ROCm Support: This would involve rewriting or adapting the CUDA-specific code in Darknet to use OpenCL or ROCm's HIP API. However, this approach probably requires significant effort and would be better handled upstream.
and Luis Guzmán show at
https://gitlab.trisquel.org/trisquel/package-helpers/-/issues/177#note_12337
Hello @jxself, I suggested @Other_Cody to go into the forum for further discussion to actually learn what's going on inside the package as a good practice to report issues, actually take the time to go into the source of the issue (see what I did there :-) and avoid rushed assumptions.
I believe the best we can take from cases like this is to have a well aware community on what and why changes are done.
Indeed, removing packages shouldn't be the first option (if possible), however at this point in time the dev team is working on Ecne as the main priority in addition other pending tasks making this package fall lower in the ToDo list. That said, seems like the most affordable option is to remove the (unsupported) CUDA code.
Regards.
and prospero typed in part
If you can remove those "CUDA things" and compile, the situation would indeed be cleaner.
https://trisquel.info/en/forum/edge-cases-free-software#comment-177347
So that was why I was looking into "into the source of the issue" at see if any code was not compiled, but if non-free CUDA was being interpreted by the compiled code, and still being run.
Like javascript can run without being compiled in a browser.
https://www.gnu.org/philosophy/javascript-trap.html
So if Jason Self thought of ensuring that the software doesn't have any proprietary dependencies.
And Luis Guzmán thought That said, seems like the most affordable option is to remove the (unsupported) CUDA code.
And prospero thought If you can remove those "CUDA things" and compile, the situation would indeed be cleaner.
I thought to check how the files shown both at the source and the darknet_0.0.0+git20180914.61c9d02e-2build4_amd64.deb folder to see if any of these still ran CUDA code, or compiled it with a bundled CUDA compiler.
Or ran CUDA code as interpreted code, even if some of it may not have been compiled.
Though I do not think I have much skill to remove the code, if I could do that quickly, that could at least help the Trisquel developers in some way, if the developers thought to remove the code.
And as the dev team is working on Ecne as the main priority in addition other pending tasks making this package fall lower in the ToDo list. I did not wish to add extra work to for the dev team, so I was checking the "source of the issue" or the source code, to see what the code actually did even if it was not compiled.
Thank you, Magic Banana for showing how the link shows that shows CUDA may not be compiled, and the information about the C preprocessor.
And about what Darknet repository code Trisquel uses for its Darknet.
I was just checking the "source of the issue" or the source code, to see what the code actually did even if some of it was not compiled.
As I saw some cuda things in the .deb folder, and did not know if these could be interpreted CUDA code.
I also found out how to use ldd to print shared object dependencies.
So as to check binaries/files in the darknet_0.0.0+git20180914.61c9d02e-2build4_amd64 folder as well as the source code.
So if CUDA code is removed from Darknet, even if it would not alter the compiled code of Darknet, at least Nvidia (the developer of CUDA) than may not state that their proprietary language was used or distributed in source form without their permission by Trisquel, even if it is not compiled into Darknet (as CUDA the language may be copyrighted by them, and not just the CUDA compiler).
Sorry about any rushed assumptions I may have made, or other problems (my intention was just trying to help out Trisquel's developers by reporting an issue), though I also hope cases like this can help make a well aware community on what and why changes are done. for any edge topics or topics.
So that was why I was looking into "into the source of the issue" at see if any code was not compiled, but if non-free CUDA was being interpreted by the compiled code, and still being run.
With GPU=0, the preprocessor removes CUDA-related code before the actual compilation of Darknet starts. Even if some of the code requiring CUDA was not between #ifdef GPU and #endif (a bug to report to the developers of Darknet), that code would not run on a system without CUDA, by definition.
Like javascript can run without being compiled in a browser.
That is a completely different situation. The JavaScript interpreter in Firefox or Abrowser will interpret any JavaScript it is given, whatever its license. Here, Darknet can use CUDA if CUDA was installed and the GPU variable in Darknet's Makefile was set to 1 when Darknet was compiled. If GPU is 0, the default, the support for CUDA is not compiled.
Darknet is not a "CUDA interpreter", as you apparently believe. The CUDA code is in Darknet, between #ifdef GPU and #endif. It is compiled (with GPU=1) or not (with GPU=0). That code is actually free software. But it cannot run without the CUDA platform, which is proprietary. That platform is an optional dependency. Of course, Trisquel does not use it. Do you understand?
Though I do not think I have much skill to remove the code, if I could do that quickly, that could at least help the Trisquel developers in some way, if the developers thought to remove the code.
Besides removing from the Makefile the definition of GPU and the lines between ifeq ($(GPU), 1) and endif, that would be doing what the preprocessor does when the GPU variable is defined as 0, the default: removing from every file everything between #ifdef GPU and the associated #endif. But, since the preprocessor does that for us, I still fail to see the point of doing it by hand.
It looks more important to change the description of the package and the associated documentation (if any), to remove any mention of CUDA or GPU computation being used: they are not and we do not want to steer users to CUDA.
I thought to check how the files shown both at the source and the darknet_0.0.0+git20180914.61c9d02e-2build4_amd64.deb folder to see if any of these still ran CUDA code, or compiled it with a bundled CUDA compiler.
That would be a freedom issue if proprietary software was bundled. I see no reason to believe that. https://pjreddie.com/darknet/install/#cuda explains that CUDA must be installed for the compilation with GPU=1 to succeed.
Or ran CUDA code as interpreted code, even if some of it may not have been compiled.
CUDA interpretation does not exist. CUDA code is always compiled.
With GPU=0, the preprocessor removes CUDA-related code before the actual compilation of Darknet starts. Even if some of the code requiring CUDA was not between #ifdef GPU and #endif (a bug to report to the developers of Darknet), that code would not run on a system without CUDA, by definition.
I see
https://www.gnu.org/licenses/quick-guide-gplv3
shows in part
The new definition also makes it clear that you can combine GPLed software with GPL-incompatible System Libraries, such as OpenSolaris' C library, and distribute them both together. These changes will make life easier for free software distributors who want to provide these combinations to their users.
so that may be how Darknet may be compiled with a CUDA compiller, but does not have to be as in Trisquel's case, with a non-free CUDA compiller.
As without the CUDA platform the CUDA code will not run or likely even be compilled.
Though some GPLed software can still be used with or depended on non-free/GPL-incompatible software, because though CUDA code is fully non-free (as shown by the licence on Wikipedia), somehow the CUDA code (or text showing cuda) in Darknet is free at least for Trisquel to distribute.
But I see how These changes will make life easier for free software distributors who want to provide these compiled or linked to non-free proprietary components combinations to their users. As Darknet can be used/compilled/linked_somewhat with non-free things (like the CUDA platform or things like with GPL-incompatible system libraries), but does not have to be.
Or how somehow the GNU Project / FSF / Richard Stallman / any_one_making_free_software_on_a_non_free_system can help free that systems code or make replacements for it.
https://www.gnu.org/philosophy/java-trap
I'm glad GNU Project/FSF/Richard Stallman/Linus Torvalds had the copyright knowledge to find a way to make Gnu/Linux.
As I likely would not know how to make software to replace non-free software when at the start using a mostly or fully non-free system.
So Darknet can also be used on non-free systems and not need a fully free system. Though fully freedom supporting systems should likely still be used to protect the end users/developers freedoms.
Though this chart
https://www.gnu.org/licenses/quick-guide-gplv3-compatibility.png
did not show how non-free things can be connected to free things (only free with free in this chart). Maybe a larger chart can be made showing how non-free (CUDA platform dependent to run) code parts can still somehow be free software, even though it needs the completely non-free CUDA platform to run those parts.
So that may be why I did not know how free software made in non-free (as shown by Wikipedia) CUDA code (or code at least with cuda in the text, and dependent on the CUDA platform to run) could be in the same file (for legal compatibility with the GPL) as I did not see that on the quick-guide-gplv3-compatibility chart.
Or I did not see CUDA in the
https://www.gnu.org/licenses/gpl-faq.html#AllCompatibility
compatibility matrix.
Thank you for telling me that some of the code requiring CUDA still will not run without the CUDA platform installed on a system.
But it cannot run without the CUDA platform, which is proprietary.
and
That would be a freedom issue if proprietary software was bundled.
and
Darknet is not a "CUDA interpreter", as you apparently believe.
I did not know if the code in darknet also made a CUDA compiller or just in time compiller. Thank you for explaining to me how it likely does not make and include that into the compilled Darknet, or use the darknet_0.0.0+git20180914.61c9d02e-2build4_amd64/user/lib/darknet/include darknet.h file to make a cuda thing. As that file also showed the Trademarked name CUDA in it.
I see that Trisquel may be a licensee of the non-transferable license to use some trademarks held by NVIDIA, like CUDA.
As the main upstream Darknet may also be a licensee of the non-transferable license to use all materials bearing the Licensed Marks held by NVIDIA.
I think source code may count as materials bearing the Licensed Marks held by NVIDIA.
The trademark policy of NVIDIA can be found at these links near the time of this post.
Part of this policy shows
Prior Submission of Samples. At NVIDIA’s request, Licensee shall submit samples of any and all materials bearing
the Licensed Marks to NVIDIA for review and approval prior to the distribution of such material
so as the source code has the trademark CUDA in it I as a non-laywer, and not affiliated or in anyway part of NVIDIA or any of its other holdings/businesses, I see Trisquel as a distributor of material that has a NVIDIA trademark in it may, at NVIDIA’s request, submit samples of any and all materials bearing (including Darknet source code) for review and approval prior to the distribution of such material.
I hope as
Prior Submission of Samples. At NVIDIA’s request, Licensee shall submit samples of any and all materials bearing
the Licensed Marks to NVIDIA for review and approval prior to the distribution of such material
with the non-transferable clause in the trademark policy of NVIDIA, and other parts of the trademark policy,
will not adversely affect the verbatim copying and redistribution of the whole distribution, or any part, (like Darknet's cuda source parts) for downstream users of Darknet, as it shows text only trademarks held by NVIDIA.
https://www.gnu.org/distros/free-system-distribution-guidelines.html
I hope Trisquel's Darknet is not thought as
objectionable in light of NVIDIA’s reputation for providing
high quality product
As this is subjective and dependent on NVIDIA's company owners views on many topics.
As
NVIDIA shall have the right to make objections to any such sample on the grounds that NVIDIA believes in good faith that the use or distribution of such materials will be damaging to the recognition value or reputation for quality associated with the Licensed Marks, or the materials do not meet the requirements of this Policy or Licensee’s agreement with NVIDIA
so as long as the use of Darknet is not thought of as damaging to the recognition value or reputation for quality associated with the Licensed Marks, or the materials do not meet the requirements of this Policy or Licensee’s agreement with NVIDIA
and use of the CUDA text only trademarks in the source of the program is a use of the trademark thought to be of a subjective quality associated with the Licensed Marks of NVIDIA,
and
Cooperation. At NVIDIA’s request and expense, Licensee shall provide NVIDIA with any specimens and execute all
documents necessary to protect and confirm NVIDIA’s rights to the Licensed Marks and any act reasonably necessary for
NVIDIA to secure or maintain rights to the Licensed Marks. Licensee further agrees to provide Licensee’s contact
information and to keep NVIDIA updated on the contact information elements on a timely basis, for purposes of any notice
required under this Agreement or revisions to Exhibit A and/or B that NVIDIA may issue.
as long as Trisquel is a Licensee of the text only trademark CUDA held by NVIDIA, maybe source with CUDA text only can be distribute in verbatim, for now by Trisquel.
Does anyone know where Trisquel's Licensee’s agreement with NVIDIA is at to distribute at least verbatim source code with the trademark CUDA in the source code?
Or when Trisquel and/or the upstream Darknet developers provided contact information to NVIDIA to keep NVIDIA updated on the contact information elements on a timely basis, for purposes of any notice required under this Agreement or revisions to Exhibit A and/or B that NVIDIA may issue.
As this may be added terms to Darknet's license that also may affect downstream distributors/users of Darknet with the trademark CUDA in the source code, as anyone who distributes the source for Darknet with CUDA trademarks/cuda in the source may also have to provided contact information to NVIDIA, even when distributing verbatim source code.
https://www.gnu.org/distros/free-system-distribution-guidelines.html
However, it is unacceptable to use trademarks to restrict verbatim copying and redistribution of the whole distribution, or any part.
Maybe these terms can be added to Trisquel's Darknet with NVIDIA’s trademark policy in it so anyone downstream can also see if they can distribute verbatim source code (for as long as the terms do not change) with the non-transferable (by end users/distributor like Trisquel/Darknet_developers) license to use NVIDIA’s trademark CUDA when distributing verbatim source code. Though only NVIDIA may issue each license for of the text only trademarks of CUDA in the source code, so verbatim copies of the source code can be distribute by anyone downstream.
As only those who are licensee of NVIDIA’s trademarks may distribute verbatim source code with CUDA (a trademark held by NVIDIA) in it. But I think only NVIDIA can issue the NVIDIA trademark license, as it is a non-transferable license likely made by NVIDIA's laywers.
Licensee will use commercially reasonable efforts to comply with any new list of Licensed Marks or
Guidelines different from those in Exhibit A or Exhibit B in a timely fashion.
So even if these could be used now by Trisquel, any new list made by NVIDIA may add new rules to the terms, without Trisquel doing anything wrong with the source code that has the CUDA text trademark in it.
https://www.gnu.org/philosophy/free-sw.html
In order for these freedoms to be real, they must be permanent and irrevocable as long as you do nothing wrong; if the developer of the software has the power to revoke the license, or retroactively add restrictions to its terms, without your doing anything wrong to give cause, the software is not free.
5. Termination. Should NVIDIA notify Licensee that any of Licensee’s uses of the Licensed Marks does not meet the
requirements set forth in this License or any other display specifications promulgated by NVIDIA, Licensee shall correct
all misuses of the NVIDIA Marks as soon as possible and in any case within fifteen (15) days of notice from NVIDIA.
Attempts at a cure or partial cures will not serve to stay the running of the fifteen (15) day cure period unless such stay is
first agreed to in writing by NVIDIA. If the misuse of the NVIDIA Marks is not corrected within fifteen (15) days,
Licensee’s license to use the NVIDIA Marks shall terminate at the end of that fifteen-day (15) period and Licensee shall
immediately discontinue all use of the NVIDIA Marks and promptly destroy or return to the place designated by NVIDIA
all materials that bear the NVIDIA Marks.
I'm not NVIDIA, though if any new list made by NVIDIA may add new rules to the terms and NVIDIA notifies Trisquel/Darknet_developers/any_downstream_user who is a licensee that
(as a non-licensee may not distribute even verbatim copies of Darknet's source code with the CUDA text only trademarks in it as shown by NVIDIA's policies)
there are new terms these new terms may prevent more things or add more rules.
The License granted hereunder is not assignable or transferable in any manner by Licensee, nor does
Licensee have the right to grant sublicenses hereunder except with NVIDIA’s prior written consent
So downstream users may not be able to distribute verbatim source code unless they have NVIDIA’s prior written consent.
Thank you for explaining to me how it likely does not make and include that into the compilled Darknet, or use the darknet_0.0.0+git20180914.61c9d02e-2build4_amd64/user/lib/darknet/include darknet.h file to make a cuda thing.
If GPU is 1, include/darknet.h would include cuda_runtime.h, curand.h, cublas_v2.h and possibly cudnn.h (if CUDNN is 1 too). With GPU=0, those inclusions never happen, because they are between a #ifdef GPU and its matching #endif.
Let me repeat the important point in my last message, that you could help with:
It looks more important to change the description of the package and the associated documentation (if any), to remove any mention of CUDA or GPU computation being used: they are not and we do not want to steer users to CUDA.
This has nothing to do with respecting Nvidia's trademarks by the way: a user will not believe Nvidia made Darknet just because it is described as being "written in C and CUDA".
I think you are right as a user will not believe Nvidia made Darknet, though I did not know if the source code or description of the package and the associated documentation (maybe the source code as thought of as documentation of parts of CUDA code).
But as I am not a lawyer, I looked at Wikipedia (even though Wikipedia is not a law firm/business) and also saw in part these things
https://en.wikipedia.org/wiki/Trademark_infringement#Functionality
The Supreme Court has held that a product is functional if:
(1) it is essential to the use or purpose of the article, or if it affects the cost or quality of the article;[37] OR
The Darknet Trisquel uses in the compiled form may not have any CUDA.
So likely not a problem in the compiled Darknet that Trisquel distributes.
So source code and/or description and/or documentation may matter more than the compiled binary of Darknet that Trisquel distributes.
Even though include/darknet.h does show the cuda_runtime.h this may not be functional but,
(2) the exclusive use of the functional feature would put competitors at a significant disadvantage.[37]
[37] Whirlpool Corp. v. Shenzhen Sanlida Elec. Tech. Co., Ltd., 80 F.4th 536.
And as if source code just using the text "CUDA" could be "exclusive use" so only Nvidia could use any possibility of even using or distributing source with any text just showing the word/text (though trademarked) it may put competitors at a significant disadvantage or anyone who for some reason did wish to use that non-libre thing at significant disadvantage.
As the word cuda (as shown in the source) may be needed to even use/link/get_a_thing_compiled_with a non-libre compiler.
Though Trisquel's Darknet does not need the CUDA parts/words/text.
https://en.wikipedia.org/wiki/Trademark_infringement#Fair_use
shows in part
There are two types of fair use, descriptive fair use and nominative fair use.
Descriptive fair use allows a third party to use another party's descriptive trademark to describe its own product or service.[39] In order to successfully assert a fair-use defense to a trademark infringement claim, the defendant must prove the three elements of the fair-use doctrine:
So the 3 elements
(1) that the term was used in a way other than as a mark;
It was used as part of or in source code.
I do not think that is being used as a trademark, even though Nvidia does have text only trademarks, as this is part of unsupported source code.
(2) that the term was used to describe the goods or services offered or their geographic origin; and
More like in this case, as explained by many users typing here about it, what is not in compiled into Trisquel's Darknet.
So what goods/services/binaries offered by Trisquel do not need.
And thus to describe what Trisquel (for lack of a better word at this time) a competitor to non-libre software does not need (CUDA).
(3) that the use had been undertaken in good faith.[40]
I think this may have been undertaken in something that could be typed about as "good faith".
Nominative fair use allows third parties to use another party's trademark to refer to that party's actual product or service.[41] The use must not create a likelihood of confusion and cannot imply sponsorship or endorsement by the trademark owner where none exists.[42]
As Trisquel's did use the text/trademark "CUDA" in a way as to show what Trisquel's Darknet does not likely need or use cuda, to refer to that party's (Trisquel) actual product or service (Darknet as compiled by Trisquel though not first made by Trisquel, but upstream https://github.com/pjreddie/darknet.git). (Trisquel's Darknet does not need/have/use cuda)
The use of CUDA in this case (though I'm not a lawyer) does not look to me like Trisquel is trying to imply sponsorship or endorsement by Nvidia, but instead showing how the distro Trisquel tries to avoid the use of the non-libre software (cuda) made by Nvidia.
Like some companies of some products show this is compared to another product, but not that product.
Though I see Trisquel does not even show this is compared to, as it looks to me as better because Trisquel tries to keep out non-libre things of it's binaries/compiled_code.
Thank you everyone for showing me and others more information about how how things can compile and how terms/words/text can be used in ways other than in trademark like ways, but in ways other than as a mark, like in source code. In this case to not use something, and show how it is not being used.
po/tr/minetest.po:"Devam ederseniz, kimlik bilgilerinizi kullanarak yeni bir hesap bu sunucuda "
po/tr/minetest.po:"Bu, sunucuda \"hayalet\" yetkisi gerektirir."
po/tr/minetest.po:"Bu, sunucuda \"uçma\" yetkisi gerektirir."
po/tr/minetest.po:msgstr "Sunucudan alınan harita kaydediliyor"
Those are Turkish translations (I believe), not code.
lib/jsoncpp/json/json.h:// Workaround for bug in the NVIDIAs CUDA 9.1 nvcc compiler
That is a comment in a C++ header, not code.
lib/catch2/catch.hpp:#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__)
lib/catch2/catch.hpp:# if !defined(__ibmxl__) && !defined(__CUDACC__)
Those are directives for the C preprocessor. If the variable __CUDACC__ is defined, the subsequent C++ lines, until #endif, are not compiled. I do not see the point of removing those tests: it will change nothing, unless the CUDA compiler is used.
Those are Turkish translations (I believe), not code.
Thank you for telling me what language you believe those are in.
I did not think that part was code, I was just typing what grep showed at that time.
That is a comment in a C++ header, not code.
Here I was mostly looking at minetest because it had some bundled dependencies in-case some dependencies are not present on the system it is being compiled on.
And I was thinking Darknet may also have bundled dependencies in parts of it's code.
So I was mostly checking Darknet code, and thought to check minetest for CUDA code at that time also.
Those are directives for the C preprocessor. If the variable __CUDACC__ is defined, the subsequent C++ lines, until #endif, are not compiled. I do not see the point of removing those tests: it will change nothing, unless the CUDA compiler is used.
I did not know if there was any CUDA code or directives about CUDA in Minetest, or even know if CUDACC had anything to do with CUDA at all. Thank you for the information about these being directives for the C preprocessor, Magic Banana.