I have created a few practical programming assignments for a bachelor's course in computer science, which I'm quite proud of. I'd love for my work to be used anywhere, and for any future teachers or assistants to be able to use/modify/improve my work, while making sure my name remains associated to it. The course's teacher agrees, but wants me to make sure the solutions are prevented from being published. So:

  • How could I license the assignments, allowing usage and modification, but keeping my name on the documents?
  • Are there licenses that prevent publication of certain parts of the package? Could I license the solutions separately?

EDIT: I might've provided too little information. The work I want to license is a package consisting of three assignments. Each assignment has a LaTeX-/PDF-file and a few Python files. These Python files are a framework, which the students need to complement with their own code. For each assignment there is also a reference implementation (what I called solutions earlier).

Anything from the package can freely be distributed and edited, as long as my name stays associated with it. However, the reference implementations may never be shared publicly. This is mainly targeted at future teaching assistants. There might always be those that budge under the pressure of students asking to share the reference implementations. Of course I cannot (realistically) prevent students from sharing their solutions, but the university can always call in students how do so and ask them to remove their solutions from the web (it happened to me a few times).

  • 1
    To be clear, you want to forbid an instructor (or whoever) using your curriculum from publishing the curriculum's canonical solutions, correct? My understanding is that you are not asking about how to prohibit students who write their own solutions from spreading those around. (I assume it's the first, but the second option doesn't seem totally excluded based on the question text.)
    – apsillers
    Aug 30, 2018 at 17:13
  • Yes, you're completely correct. Please see my edit for a clarification. Aug 31, 2018 at 9:15

2 Answers 2


Simple. Don't publish what you consider to be the "right" answer.

As a fellow teacher (adjunct, Linux admin stuff for a networking AS degree, the occasional intro to SQL class) I like the fact that you want to share your assignments and work, etc. And I might even look at how you solved the problem. But I'm going to do it myself anyway. And, grading isn't based on how different a student did theirs from mine, it is about if it works, if it follows best practices re: naming things and comment use, the defined coding style for the course, etc. So the teacher side of me would be interested in seeing what you think is the best answer/solution, but I wouldn't use it for grading or show to the students, and so Teacher Ivan says don't publish your answers.

As a student (I'm formalizing my life experience to get a piece of paper) I really hate it when teachers use canned problems, canned solutions, and don't know the subject well enough to 1) complete the homework they've assigned me and 2) know the subject well enough to explain why the way I chose to solve the problem is "wrong", other than "it is different from the answer I got from some other guy on stackexchange". So the student side of me supports you not putting the answers out for my lazy teachers :)

  • 1
    That makes a lot of sense. I'll license the assignments using CC-BY-SA, while keeping my reference implementations to myself. Sep 10, 2018 at 14:23

I don't think you can prevent solutions from being published, unless you only reveal your assignments in exchange for signing an NDA – which precludes publishing your work in any way.

You simply do not have the right via copyright law to prohibit publication of related works if they are not (textually) derived from your work. Copyright protects specific expression, not ideas. Therefore, you'd have to resort to contract law which allows you to impose almost arbitrary restrictions, but requires the other party to actively accept/sign that contract.

If you still want to publish your assignments, the licensing is probably fairly easy. There are scores of open source licenses, but most are concerned about software. For non-software creative works, the Creative Commons license family might be appropriate. This is a modular license system:

  • CC-BY: This is a permissive license (similar to the Apache or MIT licenses for software) that allows any use of your assignments as long as they attribute you. Attribution usually means your name, a reference to the original source (where you published it), and a mention of the creative common license terms.

  • CC-BY-SA: This is a copyleft license (similar to the GPL for software). In addition to the CC-BY license, any derived works can only be published under the same license. I.e. if someone modifies your assignments they can use them internally, but if they share their modifications they must give their recipients the same freedom to make modifications. Any user content on Stack Exchange uses the CC-BY-SA 3.0 license.

Whatever approach you use, you will probably not be able to prevent students from creating and sharing their solutions. E.g. at one place where I studied, the student association maintained a detailed archive of old exams and lecture notes. And students will of course share notes with their colleagues who take the course next semester. There are a couple of typical approaches to limit the usefulness of this:

  1. Make your assignments parameterized. E.g. for a math course, change the numbers each time. If a student has difficulty with this assignment, they can work through old solutions to understand the applicable methods, without directly getting the correct answer.
  2. Mix facts that can be memorized with reflection, analysis, and creativity. E.g. if a student created a software project, ask them to explain why their design fits the given problem and what the trade-offs involved were.
  3. Offer a pool of assignments, from which one is randomly picked.
  • Thanks for taking the time to write your answer. However, I can see that I have been unclear in my question. I clarified the original question. Aug 31, 2018 at 9:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.