This is my first open source project, apart from tiny bits of code that no one ever paid any attention to. Maybe I don’t know how to do open source properly, maybe I made a mistake here. Let’s find out.
A few months ago, someone made a new fork of PieFed, which they called ‘Pylova‘. In the first few days of it’s existence the developers of the fork were very enthusiastic about it and did a lot of interesting and useful work.
I had a browse of what they’d done and saw something cool that I wanted PieFed to have too – some improvements to cross-posting functionality and two new themes. Thinking “we’re both open source projects here, it’s fine to copy code between AGPL open source projects, right?” I went ahead and did exactly that. I genuinely believed I was exercising the rights that the AGPL grants us.
Here is the cross-posting code I copied, by generating a .patch file from the pylova repo:
https://codeberg.org/rimu/pyfedi/commit/4020ca1688069adf74c682fc9ca89adfee09e4c9
See how it has quokkau in the top left? That’s the original author there. I guess that was embedded in the .patch somehow. I didn’t give it too much thought as it didn’t seem important at the time.

Then straight afterwards I copied the themes:
https://codeberg.org/rimu/pyfedi/commit/785b15fde4a439c8a92f16eea5c2ff166fe3b7a5

This time I copied the code using copy and paste, by selecting the text in the browser and pasting it into my IDE. Unlike the complicated code in the first batch, I really just wanted the entire contents of the two styles.css files and it seemed simpler to do it that way. Unlike the first batch, this didn’t put quokka as the author in the git repo. Thinking nothing of it, I deployed the code and got on with other things.
Both the .patch with the cross-posting functionality and the themes were done within minutes of each other, as one piece of work. See the git history below:

There is not enough time between those two commits for the various events that some people allege took place to have occurred. In those 8 minutes I was busy doing the work there was no time to do anything else. I won’t go into those allegations here.
Time passes…
A week later a third party told me that the Pylova developer(s) were very unhappy that I had copied some code. Something about not giving proper attribution and that I stole code. I was very surprised and a bit confused. The header of the theme files I copied didn’t have any attribution/copyright/author statement (and still don’t) so there was no attribution statement to preserve.
Seeking to avoid any problems and angst I immediately removed that code from PieFed. Here are the commits where I did that:
Removed ‘allow cross-posting of images’: https://codeberg.org/rimu/pyfedi/commit/fcac0f20b65a782c3fe73dd2b6fa985b8a2f152a
Removed quack and groovebox themes: https://codeberg.org/rimu/pyfedi/commit/616375673795e0fa86fb79bd8ecfb2ff982e4b59
I copied code from an AGPL repository, into my AGPL repository, believing I was permitted to do so. The original files contained no attribution notices. When I learned that the author objected, I removed the code. I still believe that calling that “stealing” gives a very misleading impression of what happened.
Verdict?
Perhaps I was clumsy and ham-handed with my work in this situation? Perhaps I didn’t follow social conventions about how FOSS projects are supposed to work together? I hope my corrective action was enough. What do you think?
Regardless, I am sorry for any problems I caused for the Pylova project and will not be doing that again. I wish them well with their fork.

Dear Piefedadmin/Rimu,
Thank you for the effort, marvel, art, you do…
It makes sense the person got upset, but they indeed did not follow the license, considering the header/annotation missing. You did everything right from the point of the license, and considering your time you invest into the works, it makes also sense to follow the license only.
Yet, indeed, when I work at projects at jobs, or something personal, I do tend to leave references in the code as comments (if it’s in the middle; or the header, if it’s a start of the entire file); in the commit messages, or least pull-requests, though the latter is weaker considering the vendor custom database outsourced. These also help to track down the origin in the history, in case of required:
> /** @see https://codeberg.org/quokkau/PyLova/src/commit/deb4cb2bb9956019dd5c847de03a28d9b9ed45b5/app/community/routes.py#L1115 */
Yet, sure it may increase the source code much… hence commit messages, CHANGELOG.md, or pull-requests to just have a reference in the history of someone’s invaluably marvelous life on the miraculous road!
You sure know how it all works, and this is sure not fair to call it “stealing”, and especially with no private clarification prior public judgement, I believe…
Meanwhile, I do wish you safety, stability, and peace…
Best and kind regards
@piefedadmin You didn't do anything wrong. The only thing you could have done better would have been to add proper attribution yourself. But if both projects are agpl, them you did everything you were required to do that I am aware of. Don't stress yourself about it.
In mainstream FOSS development, this situation is typically handled with a routine, low-friction interaction where the downstream author opens an issue or leaves a comment on the commit saying:
“Hey, glad you liked the theme! Could you amend the commit to include Co-authored-by: or cherry-pick the original commit so the git history reflects the author?”
The Typical Resolution: The maintainer amends the commit, adds a note to the changelog/commit message, and both projects move on.
The immature way is to accuse the downstream developer of stealing.
@piefedadmin I don't think you did anything wrong, but I wish you would have contacted and challenged them. I'm sure there was simply some sort of misunderstanding there.
This is ridiculous. The AGPL does not require attribution, it simply requires that you preserve any existing copyright notices. Neither fork has copyright in preamble comments or an AUTHORS file or anything like that. As such, there is nothing to preserve. While it would be best practice to preserve Git authorship (by using `git cherry-pick` or `git format-patch` — you did this for the first commit), the license does not technically require you to do so.
You should merge all that code right back in using `git format-patch` and you will be perfectly compliant with the license. If the authors don’t like that, they should shutter their project and go fork a project that lets them relicense the code.