Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Open source license woes

Open source license woes

Scheduled Pinned Locked Moved The Lounge
csharphtmltoolsannouncement
27 Posts 9 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    Lost User
    wrote on last edited by
    #1

    Yeah, I need to decode Punycode in a project. So I find myself reading the RFC[^]. Oh look, there is a sample encoder/decoder right there in the RFC! It's my lucky day. But wait... LibIDN[^] has a verbatim copy of this code with almost no changes with the GNU license slapped onto it. But wait... the RFC is also 'Copyright (C) The Internet Society (2003). All Rights Reserved.' at the bottom which isn't mentioned anywhere on the GNU provided code. I can infer that I am not the first person to ask about this... the GNU header says the following:

    /*
    * This file is derived from RFC 3492bis written by Adam M. Costello,
    * downloaded from http://www.nicemice.net/idn/punycode-spec.gz on
    * 2015-03-02 with SHA1 a966a8017f6be579d74a50a226accc7607c40133, a
    * copy of which is stored in the GNU Libidn version controlled
    * repository under doc/specification/punycode-spec.gz.

    This is legal speak for 'We took this from a work in the public domain'. This is like following a spider web... let's keep following the threads. So let's check the original licence at http://www.nicemice.net/idn/punycode-spec.gz[^]

    B. Disclaimer and license

    Regarding this entire document or any portion of it (including
    the pseudocode and C code), the author makes no guarantees and
    is not responsible for any damage resulting from its use.  **The
    author grants irrevocable permission to anyone to use, modify,
    and distribute it in any way that does not diminish the rights**
    of anyone else to use, modify, and distribute it, provided that
    redistributed derivative works do not contain misleading author or
    version information.  Derivative works need not be licensed under
    similar terms.
    

    So without being a lawyer I interpret this as a guy named Adam wrote the Punycode RFC and put it into the public domain. Then the 'The Internet Society' slapped a copyright on the code. Then someone working on LibIDN copied the code and slapped a third lice

    H R D L K 5 Replies Last reply
    0
    • L Lost User

      Yeah, I need to decode Punycode in a project. So I find myself reading the RFC[^]. Oh look, there is a sample encoder/decoder right there in the RFC! It's my lucky day. But wait... LibIDN[^] has a verbatim copy of this code with almost no changes with the GNU license slapped onto it. But wait... the RFC is also 'Copyright (C) The Internet Society (2003). All Rights Reserved.' at the bottom which isn't mentioned anywhere on the GNU provided code. I can infer that I am not the first person to ask about this... the GNU header says the following:

      /*
      * This file is derived from RFC 3492bis written by Adam M. Costello,
      * downloaded from http://www.nicemice.net/idn/punycode-spec.gz on
      * 2015-03-02 with SHA1 a966a8017f6be579d74a50a226accc7607c40133, a
      * copy of which is stored in the GNU Libidn version controlled
      * repository under doc/specification/punycode-spec.gz.

      This is legal speak for 'We took this from a work in the public domain'. This is like following a spider web... let's keep following the threads. So let's check the original licence at http://www.nicemice.net/idn/punycode-spec.gz[^]

      B. Disclaimer and license

      Regarding this entire document or any portion of it (including
      the pseudocode and C code), the author makes no guarantees and
      is not responsible for any damage resulting from its use.  **The
      author grants irrevocable permission to anyone to use, modify,
      and distribute it in any way that does not diminish the rights**
      of anyone else to use, modify, and distribute it, provided that
      redistributed derivative works do not contain misleading author or
      version information.  Derivative works need not be licensed under
      similar terms.
      

      So without being a lawyer I interpret this as a guy named Adam wrote the Punycode RFC and put it into the public domain. Then the 'The Internet Society' slapped a copyright on the code. Then someone working on LibIDN copied the code and slapped a third lice

      H Offline
      H Offline
      honey the codewitch
      wrote on last edited by
      #2

      The GPL turned me off of anything GNU. I use the MIT license for 99% of my stuff. And that's trashy what they're doing. I'm glad nobody can take my public domain work (like my GLR parsing code) off CP and slap a copyright on it. If they tried someone could just find my work at CP. It sounds like Adam's work should be accessible. Can't you derive from that, and tell all of these copyright/license trolls to take a hike? That's what I would do.

      Real programmers use butterflies

      Greg UtasG L J 3 Replies Last reply
      0
      • H honey the codewitch

        The GPL turned me off of anything GNU. I use the MIT license for 99% of my stuff. And that's trashy what they're doing. I'm glad nobody can take my public domain work (like my GLR parsing code) off CP and slap a copyright on it. If they tried someone could just find my work at CP. It sounds like Adam's work should be accessible. Can't you derive from that, and tell all of these copyright/license trolls to take a hike? That's what I would do.

        Real programmers use butterflies

        Greg UtasG Offline
        Greg UtasG Offline
        Greg Utas
        wrote on last edited by
        #3

        I used GPL-3 so that anyone who wants to keep their code private will have to ask for another license. My assumption is that they want to use my code for commercial purposes, in which case I want to be compensated. If anyone knows of a better way to achieve this, I'm open to suggestions.

        Robust Services Core | Software Techniques for Lemmings | Articles
        The fox knows many things, but the hedgehog knows one big thing.

        <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
        <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

        H 1 Reply Last reply
        0
        • L Lost User

          Yeah, I need to decode Punycode in a project. So I find myself reading the RFC[^]. Oh look, there is a sample encoder/decoder right there in the RFC! It's my lucky day. But wait... LibIDN[^] has a verbatim copy of this code with almost no changes with the GNU license slapped onto it. But wait... the RFC is also 'Copyright (C) The Internet Society (2003). All Rights Reserved.' at the bottom which isn't mentioned anywhere on the GNU provided code. I can infer that I am not the first person to ask about this... the GNU header says the following:

          /*
          * This file is derived from RFC 3492bis written by Adam M. Costello,
          * downloaded from http://www.nicemice.net/idn/punycode-spec.gz on
          * 2015-03-02 with SHA1 a966a8017f6be579d74a50a226accc7607c40133, a
          * copy of which is stored in the GNU Libidn version controlled
          * repository under doc/specification/punycode-spec.gz.

          This is legal speak for 'We took this from a work in the public domain'. This is like following a spider web... let's keep following the threads. So let's check the original licence at http://www.nicemice.net/idn/punycode-spec.gz[^]

          B. Disclaimer and license

          Regarding this entire document or any portion of it (including
          the pseudocode and C code), the author makes no guarantees and
          is not responsible for any damage resulting from its use.  **The
          author grants irrevocable permission to anyone to use, modify,
          and distribute it in any way that does not diminish the rights**
          of anyone else to use, modify, and distribute it, provided that
          redistributed derivative works do not contain misleading author or
          version information.  Derivative works need not be licensed under
          similar terms.
          

          So without being a lawyer I interpret this as a guy named Adam wrote the Punycode RFC and put it into the public domain. Then the 'The Internet Society' slapped a copyright on the code. Then someone working on LibIDN copied the code and slapped a third lice

          R Offline
          R Offline
          Rick York
          wrote on last edited by
          #4

          It seems to me if you use only the original code then only the original license applies. Any other derivations of it are then irrelevant to you and your use of it.

          "They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"

          L 1 Reply Last reply
          0
          • H honey the codewitch

            The GPL turned me off of anything GNU. I use the MIT license for 99% of my stuff. And that's trashy what they're doing. I'm glad nobody can take my public domain work (like my GLR parsing code) off CP and slap a copyright on it. If they tried someone could just find my work at CP. It sounds like Adam's work should be accessible. Can't you derive from that, and tell all of these copyright/license trolls to take a hike? That's what I would do.

            Real programmers use butterflies

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #5

            honey the codewitch wrote:

            It sounds like Adam's work should be accessible. Can't you derive from that, and tell all of these copyright/license trolls to take a hike? That's what I would do.

            No, that license is worse than the GPL licence. I have enough experience in this area that I think I know what's going on here... I suspect that Adam modified his project at a later date and added his license. Even though I am not a lawyer... I submitted over a dozen open source projects through the MSFT 'Source Code Compliance Team' and got them approved for inclusion in Windows 10. So I got to read all of those legal determinations. There is no way LibIDN would have used that source code if the original work contained those particular paragraphs. Adam had to have added it at a later date. I am just going to avoid it.

            H 1 Reply Last reply
            0
            • R Rick York

              It seems to me if you use only the original code then only the original license applies. Any other derivations of it are then irrelevant to you and your use of it.

              "They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"

              L Offline
              L Offline
              Lost User
              wrote on last edited by
              #6

              Rick York wrote:

              It seems to me if you use only the original code then only the original license applies.

              No, that would be not be an option. When making a choice for licences you want to use something with legal precedent. Btw, the best document I have ever read regarding choice of OSS licences is by the Department of Defense[^]. I can't find it but they use to go in depth on why you can't just take some random: "Anyone can use this!" type licence.

              1 Reply Last reply
              0
              • Greg UtasG Greg Utas

                I used GPL-3 so that anyone who wants to keep their code private will have to ask for another license. My assumption is that they want to use my code for commercial purposes, in which case I want to be compensated. If anyone knows of a better way to achieve this, I'm open to suggestions.

                Robust Services Core | Software Techniques for Lemmings | Articles
                The fox knows many things, but the hedgehog knows one big thing.

                H Offline
                H Offline
                honey the codewitch
                wrote on last edited by
                #7

                That's one way to do it. I figure a copyright is enough for me, but I do not write my code samples with the notion that I will ever be compensated for them. If I did maybe I'd follow your lead. I also am paranoid about putting my actual contact info out there. Instead I have my brand (honey the codewitch) and I write articles and code under that name (for paid and free, it's my business as well)

                Real programmers use butterflies

                Greg UtasG 1 Reply Last reply
                0
                • L Lost User

                  honey the codewitch wrote:

                  It sounds like Adam's work should be accessible. Can't you derive from that, and tell all of these copyright/license trolls to take a hike? That's what I would do.

                  No, that license is worse than the GPL licence. I have enough experience in this area that I think I know what's going on here... I suspect that Adam modified his project at a later date and added his license. Even though I am not a lawyer... I submitted over a dozen open source projects through the MSFT 'Source Code Compliance Team' and got them approved for inclusion in Windows 10. So I got to read all of those legal determinations. There is no way LibIDN would have used that source code if the original work contained those particular paragraphs. Adam had to have added it at a later date. I am just going to avoid it.

                  H Offline
                  H Offline
                  honey the codewitch
                  wrote on last edited by
                  #8

                  Bummer!

                  Real programmers use butterflies

                  1 Reply Last reply
                  0
                  • H honey the codewitch

                    That's one way to do it. I figure a copyright is enough for me, but I do not write my code samples with the notion that I will ever be compensated for them. If I did maybe I'd follow your lead. I also am paranoid about putting my actual contact info out there. Instead I have my brand (honey the codewitch) and I write articles and code under that name (for paid and free, it's my business as well)

                    Real programmers use butterflies

                    Greg UtasG Offline
                    Greg UtasG Offline
                    Greg Utas
                    wrote on last edited by
                    #9

                    I don't think anyone would want the code in my articles, since they're usually simplified fragments or outright sketches. But since my GitHub license is GPL-3, I just use that for the articles. Our residential address is also unpublished. :cool:

                    Robust Services Core | Software Techniques for Lemmings | Articles
                    The fox knows many things, but the hedgehog knows one big thing.

                    <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                    <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                    H 1 Reply Last reply
                    0
                    • Greg UtasG Greg Utas

                      I don't think anyone would want the code in my articles, since they're usually simplified fragments or outright sketches. But since my GitHub license is GPL-3, I just use that for the articles. Our residential address is also unpublished. :cool:

                      Robust Services Core | Software Techniques for Lemmings | Articles
                      The fox knows many things, but the hedgehog knows one big thing.

                      H Offline
                      H Offline
                      honey the codewitch
                      wrote on last edited by
                      #10

                      O/T: You were the one I was talking to earlier about an automatically generated assignment constructor in C++, right? This may not be the cleanest way to do it but it's hassle free, and almost as short as an autoimplemented memberwise-copy version would be:

                      MyStruct(const MyStruct& rhs) { memcpy(this,&rhs,sizeof(MyStruct)); }

                      Real programmers use butterflies

                      Greg UtasG 1 Reply Last reply
                      0
                      • H honey the codewitch

                        O/T: You were the one I was talking to earlier about an automatically generated assignment constructor in C++, right? This may not be the cleanest way to do it but it's hassle free, and almost as short as an autoimplemented memberwise-copy version would be:

                        MyStruct(const MyStruct& rhs) { memcpy(this,&rhs,sizeof(MyStruct)); }

                        Real programmers use butterflies

                        Greg UtasG Offline
                        Greg UtasG Offline
                        Greg Utas
                        wrote on last edited by
                        #11

                        _memcpy_?! You'll be going to bed hungry tonight! But that's basically what

                        Struct(const Struct& that) = default;

                        does, though it's more paternalistic. If Struct owns no resources and its constructor has no side effects, go for it and revel in your naughtiness. One thing to note is that a C++ copy constructor only invokes a base class constructor, not copy constructor, unless explicitly implemented to do otherwise. I've now reached 🍷🍷🍷🍷, so you'd best find a proper authority lest I've led you astray! :laugh:

                        Robust Services Core | Software Techniques for Lemmings | Articles
                        The fox knows many things, but the hedgehog knows one big thing.

                        <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                        <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                        H 1 Reply Last reply
                        0
                        • Greg UtasG Greg Utas

                          _memcpy_?! You'll be going to bed hungry tonight! But that's basically what

                          Struct(const Struct& that) = default;

                          does, though it's more paternalistic. If Struct owns no resources and its constructor has no side effects, go for it and revel in your naughtiness. One thing to note is that a C++ copy constructor only invokes a base class constructor, not copy constructor, unless explicitly implemented to do otherwise. I've now reached 🍷🍷🍷🍷, so you'd best find a proper authority lest I've led you astray! :laugh:

                          Robust Services Core | Software Techniques for Lemmings | Articles
                          The fox knows many things, but the hedgehog knows one big thing.

                          H Offline
                          H Offline
                          honey the codewitch
                          wrote on last edited by
                          #12

                          I would only use it for structs whose types I could hypothetically place in a union - that is, trivial things. Wait. are you saying

                          Struct(const Struct& that) = default;

                          Will compile? I misunderstood you earlier, if so. I thought you were saying that as a wish list item. When was it added to the spec? There's so much to C++ if you stop using it for a few years you can miss out on features. :sigh:

                          Real programmers use butterflies

                          Greg UtasG 2 Replies Last reply
                          0
                          • H honey the codewitch

                            I would only use it for structs whose types I could hypothetically place in a union - that is, trivial things. Wait. are you saying

                            Struct(const Struct& that) = default;

                            Will compile? I misunderstood you earlier, if so. I thought you were saying that as a wish list item. When was it added to the spec? There's so much to C++ if you stop using it for a few years you can miss out on features. :sigh:

                            Real programmers use butterflies

                            Greg UtasG Offline
                            Greg UtasG Offline
                            Greg Utas
                            wrote on last edited by
                            #13

                            Indeed! C++11, I believe. I don't use anything after that.

                            Robust Services Core | Software Techniques for Lemmings | Articles
                            The fox knows many things, but the hedgehog knows one big thing.

                            <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                            <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                            H L 2 Replies Last reply
                            0
                            • Greg UtasG Greg Utas

                              Indeed! C++11, I believe. I don't use anything after that.

                              Robust Services Core | Software Techniques for Lemmings | Articles
                              The fox knows many things, but the hedgehog knows one big thing.

                              H Offline
                              H Offline
                              honey the codewitch
                              wrote on last edited by
                              #14

                              OMG you're right. I think I remember encountering it once and making a mental note of it, and then forgetting the mental note. I love C++. I'm always learning new stuff. thanks.

                              Real programmers use butterflies

                              1 Reply Last reply
                              0
                              • H honey the codewitch

                                I would only use it for structs whose types I could hypothetically place in a union - that is, trivial things. Wait. are you saying

                                Struct(const Struct& that) = default;

                                Will compile? I misunderstood you earlier, if so. I thought you were saying that as a wish list item. When was it added to the spec? There's so much to C++ if you stop using it for a few years you can miss out on features. :sigh:

                                Real programmers use butterflies

                                Greg UtasG Offline
                                Greg UtasG Offline
                                Greg Utas
                                wrote on last edited by
                                #15

                                You can now default any special member function: - constructor - destructor - copy constructor - move constructor - copy operator - move operator EDIT: And so the Big 3 (destructor, copy constructor, copy operator)--the guideline being that if you have one, you probably need the others--became the Big 5. Not to be confused with the Big 5 in Cantonese...

                                Robust Services Core | Software Techniques for Lemmings | Articles
                                The fox knows many things, but the hedgehog knows one big thing.

                                <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                                <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                                1 Reply Last reply
                                0
                                • Greg UtasG Greg Utas

                                  Indeed! C++11, I believe. I don't use anything after that.

                                  Robust Services Core | Software Techniques for Lemmings | Articles
                                  The fox knows many things, but the hedgehog knows one big thing.

                                  L Offline
                                  L Offline
                                  Lost User
                                  wrote on last edited by
                                  #16

                                  Greg Utas wrote:

                                  I don't use anything after that.

                                  Me either, although I was just porting some code last week to use std::filesystem[^] and that is extremely useful addition.

                                  H 1 Reply Last reply
                                  0
                                  • L Lost User

                                    Greg Utas wrote:

                                    I don't use anything after that.

                                    Me either, although I was just porting some code last week to use std::filesystem[^] and that is extremely useful addition.

                                    H Offline
                                    H Offline
                                    honey the codewitch
                                    wrote on last edited by
                                    #17

                                    Ugh, you two. Years of .NET and here I am, rusty at C++ and C++ with all these new features to boot. I'm glad I'm back in the fold, though clearly I have some catching up to do. :)

                                    Real programmers use butterflies

                                    1 Reply Last reply
                                    0
                                    • L Lost User

                                      Yeah, I need to decode Punycode in a project. So I find myself reading the RFC[^]. Oh look, there is a sample encoder/decoder right there in the RFC! It's my lucky day. But wait... LibIDN[^] has a verbatim copy of this code with almost no changes with the GNU license slapped onto it. But wait... the RFC is also 'Copyright (C) The Internet Society (2003). All Rights Reserved.' at the bottom which isn't mentioned anywhere on the GNU provided code. I can infer that I am not the first person to ask about this... the GNU header says the following:

                                      /*
                                      * This file is derived from RFC 3492bis written by Adam M. Costello,
                                      * downloaded from http://www.nicemice.net/idn/punycode-spec.gz on
                                      * 2015-03-02 with SHA1 a966a8017f6be579d74a50a226accc7607c40133, a
                                      * copy of which is stored in the GNU Libidn version controlled
                                      * repository under doc/specification/punycode-spec.gz.

                                      This is legal speak for 'We took this from a work in the public domain'. This is like following a spider web... let's keep following the threads. So let's check the original licence at http://www.nicemice.net/idn/punycode-spec.gz[^]

                                      B. Disclaimer and license

                                      Regarding this entire document or any portion of it (including
                                      the pseudocode and C code), the author makes no guarantees and
                                      is not responsible for any damage resulting from its use.  **The
                                      author grants irrevocable permission to anyone to use, modify,
                                      and distribute it in any way that does not diminish the rights**
                                      of anyone else to use, modify, and distribute it, provided that
                                      redistributed derivative works do not contain misleading author or
                                      version information.  Derivative works need not be licensed under
                                      similar terms.
                                      

                                      So without being a lawyer I interpret this as a guy named Adam wrote the Punycode RFC and put it into the public domain. Then the 'The Internet Society' slapped a copyright on the code. Then someone working on LibIDN copied the code and slapped a third lice

                                      D Offline
                                      D Offline
                                      DRHuff
                                      wrote on last edited by
                                      #18

                                      So.... it's licenses all the way down... :-D

                                      If you can't laugh at yourself - ask me and I will do it for you.

                                      1 Reply Last reply
                                      0
                                      • H honey the codewitch

                                        The GPL turned me off of anything GNU. I use the MIT license for 99% of my stuff. And that's trashy what they're doing. I'm glad nobody can take my public domain work (like my GLR parsing code) off CP and slap a copyright on it. If they tried someone could just find my work at CP. It sounds like Adam's work should be accessible. Can't you derive from that, and tell all of these copyright/license trolls to take a hike? That's what I would do.

                                        Real programmers use butterflies

                                        J Offline
                                        J Offline
                                        Jorgen Andersson
                                        wrote on last edited by
                                        #19

                                        You should take a look at the CP License, it's basically the same purpose as the MIT, but it adds a bit of protection for you. Chris went through the whole license quagmire a few years ago and decided to create his own license[^] (with the help of a lawyer IIRC) to fit the whole purpose of Codeproject. Chris's comparison for most open licenses is over here: Licenses[^] With links to the actual license texts.

                                        Wrong is evil and must be defeated. - Jeff Ello Never stop dreaming - Freddie Kruger

                                        M 1 Reply Last reply
                                        0
                                        • J Jorgen Andersson

                                          You should take a look at the CP License, it's basically the same purpose as the MIT, but it adds a bit of protection for you. Chris went through the whole license quagmire a few years ago and decided to create his own license[^] (with the help of a lawyer IIRC) to fit the whole purpose of Codeproject. Chris's comparison for most open licenses is over here: Licenses[^] With links to the actual license texts.

                                          Wrong is evil and must be defeated. - Jeff Ello Never stop dreaming - Freddie Kruger

                                          M Offline
                                          M Offline
                                          Member_14857213
                                          wrote on last edited by
                                          #20

                                          Just FYI, from what I read it seems like CPOL isn't compatible with GNU GPL: - So if you have a GNU GPL dependency it might be illegal to use a CPOL license on your project, - and it might be illegal for anyone who uses a (viral) GNU GPL dependency to use your work under a CPOL license. license compatibility - Can I use CodeProject code in a GPL project? - Open Source Stack Exchange[^]

                                          Quote:

                                          CPOL is not an open source license according to the OSI definition. It has a clause which does not allow it to be used for any purpose as mandated by the GPL or MIT license:

                                          Quote:

                                          You agree not to use the Work for illegal, immoral or improper purposes, or on pages containing illegal, immoral or improper material.

                                          If that's true it makes CPOL more restrictive than BSD, can anybody weigh in on this? Was this intentional?

                                          J Greg UtasG C 3 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups