Question: So I used a piece of software which claims to be open source and is licensed under "GPL for research purposes only". 

As far as I know, GPL 2 and 3 are not themselves free, in sense that you can't change them and still call them GPL. 

Also, as far as I remember, they don't allow developers to restrict the rights granted by them. Cases such as GPL, GPL or GPL + exceptions, or GPL or another license are possible, but GPL with some rights is removed is not allowed.

Given the above, is the idea of licensing code under "GPL for research purposes only" self-contradictory?

UPDATE:
Do to some website restructuring, I could not find the original page where the research purposes only quote comes from. However, the program itself has a license.txt with GPLv3 in it, and following additional notes appended at the end or the regular GPLv3 text:

```
ADDITIONAL NOTES 
<TheProject> is for research purposes only.  
<TheProject> CAN NOT be used for commercial purposes.
<TheProject> SHOULD NOT be used for medical purposes.  
The authors  WILL NOT be responsible for using <TheProject> in medical conditions.

```

Answer: 
Searching for the term "GPL for research purposes only" shows a number of hits that shed a somewhat different light on the matter.

It seems that there is quite a bit of GPL'ed software in the academic medical world. Such software is generally not approved for regular medical use by the regulating agencies. Even if it was, any modification would render the regulatory approval invalid.

The GPL may grant you specific rights, including the right to use the software for medical purposes, but this grant cannot overrule regulatory obligations or other laws. The grant originates in, and is restricted to copyright law.

Note that you can replace "medical" with "aviation" or similar fields.
From the information given, this is a case of **dual licensing**

<https://en.wikipedia.org/wiki/Multi-licensing>

Some answers confuse this. What you can **not** do is release code under the GPL and then add restrictions to its use. The GPL forbids that.

However what you **can** do is release the code under different licenses for different purposes. In such case, outside research purposes, the GPL does not apply because the code was not relased under the GPL for such purposes.