Can software be legally rewritten if the original source code is not used? Let's say I have propriety software which I recreate using solely my observations of its user interface, input and output. I recreate this software to near-perfection leaving out only trademark icons and symbols. Then, I publish the source code of my rewritten version of the software, under a different name to the original program, on GitHub (or something similar). Does the owner of the original software have grounds to sue me or make me take my code down from GitHub? Is this still considered reverse-engineering even though I haven't disassembled the original binary or accessed the original source code in any way?
What you're talking about is called black-box reverse engineering. It can be done, and as long as you are meticulous in your record keeping the fact that it has been done should be an appropriate defence against copyright infringement. But that doesn't help against patent claims - while in copyright cases the fact that code has or has not been directly copied is critical, in patent cases it its irrelevant: if you use a patented method, it's a violation. You therefore will need to be careful about any patents that may have been issued to the original author, as well as avoiding copying.
Reviewing https://stackexchange.com/legal/trademark-guidance shows the following: The logos associated with Stack Exchange Inc. and any Stack Exchange site are a trademark. The purpose of trademark law is to prevent consumers from being misled as to the origin of a product. So if you were making a product, and you used a Stack Exchange name or logo in your product (or in its advertising) in such a way that would mislead someone into thinking that your product was owned by, operated by, endorsed by, or in any way part of Stack Exchange Inc., you would be violating the trademark and this would not be legal. Our logo images and site names are copyrighted. Any content on the Stack Exchange Network not contributed by users is copyrighted. Copyright is different than trademark. Ordinarily you couldn't copy it. But if you were writing a news story or blog post about a Stack Exchange site, reproducing the logo image would almost certainly be considered &quot;fair use&quot; and allowed under trademark law because you were not using it &quot;in trade.&quot; So the answer to your question is yes, you would need to seek the permission of the trademark holder.
This is going to depend on several things. First of all, do you have a lawful, licensed copy of the SDK? My understanding is that Nintendo only licensed the SDK to selected game companies. If what you have is an unauthorized copy, you do not have the legal right even to use it. If what you have is properly licensed, then you do. Or is what you have an unofficial SDK created by someone other than Nintendo? Secondly, what does the license agreement that comes with the SDK provide? Does it require developers to register with Nintendo? If it does, you will need to comply. Nintendo cannot prevent others from writing programs designed to run on their hardware. But they can control who uses their development software, if they choose to. You cannot reproduce in your game any of Nintendo's copyrighted software (or anyone else's) without permission. That applies even more strongly if you intend to sell the software. But you can use any development software for which you have a valid license in whatever ways its license permits. I would expect this includes creating games. It would include selling games that you create that do not use any of Nintendo's code, unless there is a specific provision forbidding that in the license agreement.
The software being free and open source has no impact on whether it infringes any patents or violates any copyrights. Copyrights attach to fixed representations of creative work in a tangible medium (e.g., the actual code and graphical elements of the software in question). As long as you aren't copying the copyrighted work of someone else, you should be in the clear. So, if you write your own code from scratch, or rely on code that you're allowed to use (e.g., "free" software with a permissive license that allows it to be used freely), you should be fine. On the other hand, if you copy a chunk of code that you aren't allowed to use, and then change the variable names so that it's superficially different, you're likely violating someone's copyright. Patents are a much more difficult question. To determine whether you would infringe any patents, you would have to read the independent claims of every patent that might be related. If you perform all the steps of any one of those claims, then you are infringing that claim (and therefore, the patent in which it is found). Unfortunately, this is much easier said than done. First, it may be difficult to search for all the potentially relevant patents, and once you've found them, there may be far too many to read. Second, claims are written in a type of language that is specific to patents, and someone without experience in patent law may not understand them correctly. Finally, the terms in the claims may not take on their plain English meaning, but rather may have been defined by the language in the rest of that patent, so it's possible that you might incorrectly think you were in the clear based on a misunderstanding arising from that. All that said, it may be best to go ahead with implementing an idea and then waiting to see what happens. Chances are that the implementation will arguably infringe some patent in some way, no matter what's done. But chances are also high that there will never be any worrisome enforcement action taken against it by a patent owner, simply due to the difficulty and expense associated with enforcing patent rights.
That a computer language is proprietary does not mean that all code written in that language is copyrighted by the holder of copyright on the language. Anyone may write, and publish, code in a particular language without permission from the language designers, or anyone else, provided that the code is original and is not a close paraphrase of code written by someone else. If the code to be published was created by someone else, permission would be needed unless the code falls under fair use or some other exception to copyright. Permission might or might not have to be paid for.
As far as I can tell, whenever GitHub redistributes code, it adheres to all of the requirements of the GPL/BSD etc. For example, it never gives away code without including the license text, and it doesn't claim to add unpermitted restrictions to the code. The section you're concerned about is this: That means you're giving us the right to do things like reproduce your content (so we can do things like copy it to our database and make backups); display it (so we can do things like show it to you and other users); modify it (so our server can do things like parse it into a search index); distribute it (so we can do things like share it with other users); and perform it (in case your content is something like music or video). That section isn't worded very precisely, but I understand this to mean they want to reproduce your content in full, not just the code without the license text attached. They want to display your content in full, as you provided it. They want to modify it internally (i.e. they are not redistributing this modified form) in order to allow searching. To the extent that they display code-snippets as search results, that is likely defensible as fair use (search engines are frequently cited as examples of successful fair use defenses). GitHub appears to be acting consistently with the GPL when it reproduces, displays, modifies, and distributes code that you upload. If I'm correct about these facts then nothing that GitHub does with the code goes beyond what the many contributors to a GPL project have explicitly permitted, or what is otherwise permitted by fair use law. If you had some code with a more restrictive license, you might not be able to simultaneously comply with that restrictive license and GitHub's License Grant. Consider the scenario where you have some code that is licensed exclusively to you, and you are not given permission to reproduce or distribute it. In that scenario, the code's license prevents you from agreeing to GitHub's request for a license grant.
Yep, you are. You still need to keep the LICENSE and NOTICE files in the repository, if there were any in your copy of the project. These files contain the terms and conditions for the project, and provide attribution to the original developers. If you're trying to attribute in the UI of your application, you probably should. It's considered courteous and in the spirit of open source as well. This is also related: Do I need to include the full text of the MIT license in the UI of my app?
Pseudo-code written down somewhere is protected by copyright, even if the article containing it doesn't say anything about the pseudo-code contained in it (i.e. doesn't mention "this too is copyrighted"). For example, let us assume that the following isn't actual compileable / executable code in some extant programming language: procedure bubbleSort( A : list of sortable items ) n = length(A) repeat swapped = false for i = 1 to n-1 inclusive do /* if this pair is out of order */ if A[i-1] &gt; A[i] then /* swap them and remember something changed */ swap( A[i-1], A[i] ) swapped = true end if end for until not swapped end procedure It does nevertheless constitute an expression of an abstract algorithm. If it can be copied and pasted, it is an expression. If you run this through a filter to create executable code in some language, you will have created a derivative work (and possibly one with no copyright protection, if the conversion is totally automatic). If you read the lines and say "Ah, I know what that would be in Pascal", that has the modicum of creativity required to make your conversion protected, but you've still infringed the underlying work. On the other hand, a logical flow chart, which is a picture of the abstract idea of what to do, is copyright-protected only as a graphic object. If you look at it and it inspires you to write pseudo-code or actual code, you are not copying the flow chart.