Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
ShoulderDaemon
Oct 9, 2003
support goon fund
Taco Defender

Hughlander posted:

Personally I think GPL v3 has pushed a lot of people into a more MIT/BSD/Apache style license. I used to release my code under GPL v2, but now I tend to use MIT instead.

I don't quite get this. If GPLv2 does what you want, then why don't you release software under GPLv2?

Adbot
ADBOT LOVES YOU

Hughlander
May 11, 2005

ShoulderDaemon posted:

I don't quite get this. If GPLv2 does what you want, then why don't you release software under GPLv2?

I didn't say it was rational. It's just what I found myself doing. I tend to seek out MIT licenses when I have the choice and tend to release using the same.

The Gripper
Sep 14, 2004
i am winner

ToxicFrog posted:

That works great until it's running on custom hardware that you can't just buy the parts for (or can't figure out what the parts are because the specs are not published). Or if you just, say, want to tweak your TiVo a bit without needing to buy and assemble a complete hardware clone of it from scratch.
I'm sure not everyone agrees, but I just don't think a software license should dictate that kind of thing. It's needlessly restrictive and makes situations where being able to guarantee your hardware is running known, verified software impossible.

An example would be a secure device like a router or firewall; if one is made using GPLv3 software it is required to not only have the source available, but to allow any modified code to be switched in and executed unrestricted. We had an actual situation where this caused us problems as we needed to ship devices with a guarantee of binary security - which we couldn't provide - as at any point from manufacture to deployment a modified malicious/backdoored firmware could have been uploaded, unrestricted. There were alternatives (such as prompting the user about the fact that the firmware isn't signed), however requiring user-input to boot a critical device wasn't something we could actually do.

I also don't see why a developer shouldn't be able to prevent a user from running modified firmware for the purposes of protecting their own rights (copyrights, etc), or to assist in upholding terms/contracts with other companies, other than the fact that doing this conflicts directly with the "free software" mantra. Remember, RMS is against the use of even passwords, as everything should be freely accessible by everyone.

It's one of those things that from an end-user perspective looks good (because being able to do whatever you want unrestricted is good), but rules out some uses completely (as above).

The Gripper fucked around with this message at 01:46 on Mar 23, 2012

Hughlander
May 11, 2005

The Gripper posted:

I'm sure not everyone agrees, but I just don't think a software license should dictate that kind of thing. It's needlessly restrictive and makes situations where being able to guarantee your hardware is running known, verified software impossible.

An example would be a secure device like a router or firewall; if one is made using GPLv3 software it is required to not only have the source available, but to allow any modified code to be switched in and executed unrestricted. We had an actual situation where this caused us problems as we needed to ship devices with a guarantee of binary security - which we couldn't provide - as at any point from manufacture to deployment a modified malicious/backdoored firmware could have been uploaded, unrestricted. There were alternatives (such as prompting the user about the fact that the firmware isn't signed), however requiring user-input to boot a critical device wasn't something we could actually do.

I also don't see why a developer shouldn't be able to prevent a user from running modified firmware for the purposes of protecting their own rights (copyrights, etc), or to assist in upholding terms/contracts with other companies, other than the fact that doing this conflicts directly with the "free software" mantra. Remember, RMS is against the use of even passwords, as everything should be freely accessible by everyone.

It's one of those things that from an end-user perspective looks good (because being able to do whatever you want unrestricted is good), but rules out some uses completely (as above).

The developer is 100% free to protect their own rights, as long as they wrote the code. If they want to leverage the code someone else wrote, then they have to respect that persons rights. No one is saying every device must be open at all times. (Well other than RMS.) People are merely saying that if you used the community to cut down the development time and save you money you have to respect the license that the community gave you along with the code that saved you time/money. So don't try to have your cake and eat it too, you want control over everything, develop it yourself or license it from someone who isn't using GPL v3.

The Gripper
Sep 14, 2004
i am winner

Hughlander posted:

The developer is 100% free to protect their own rights, as long as they wrote the code. If they want to leverage the code someone else wrote, then they have to respect that persons rights. No one is saying every device must be open at all times. (Well other than RMS.) People are merely saying that if you used the community to cut down the development time and save you money you have to respect the license that the community gave you along with the code that saved you time/money. So don't try to have your cake and eat it too, you want control over everything, develop it yourself or license it from someone who isn't using GPL v3.
The problem I have is that the developer is free to protect his own rights until he touches GPLv3, which then restricts his rights in completely unrelated ways. If a developer makes something and releases it as GPLv3 by necessity (because it makes use of GPLv3 code), to run on hardware with no restrictions, that is fine (as far as GPLv3 goes). The user can make changes and run that on their hardware no problem.

If that developer then creates new hardware that will only run software that is signed by their QA department (GPLv3 or otherwise), and they then sign the old software so it runs, that infringes. The developer would need to make their new hardware open just so they can run old GPLv3 code. This situation applies the GPLv3 license to hardware created without the GPLv3 at all, despite having the ability to run signed GPLv3 software.

This absolutely shouldn't be the case.

Edit; I guess I'm saying that the software and hardware shouldn't be bundled together (and signing files shouldn't be covered as part of the GPLv3 because it's a separate after-the-fact thing), and provided the developer gives the modified code back to the community so they can benefit from it despite not being able to gently caress around with the hardware, I don't see how the developer is "having his cake and eating it too".

I still treat the GPL as if it's a only a software license and not a general "making sure the user can do whatever the gently caress they want" license, so my opinions relate to that.

Edit2; this is a coding horrors thread why am i posting this in here :argh:

The Gripper fucked around with this message at 02:20 on Mar 23, 2012

Internet Janitor
May 17, 2008

"That isn't the appropriate trash receptacle."
I just don't think it's very cool to say "you're free to use this code I put on the internet BUT ONLY IF YOU SUBSCRIBE TO MY NUANCED, HEAVILY POLITICIZED BELIEFS AND ALSO YOU'D BETTER NOT BE SOME EVIL CORPORATION WHO WILL PROFIT FROM MY BRILLIANT IDEAS!"

If you want people to be able to have the code, that's awesome. It seems equally reasonable to be able to decide to keep your creative output to yourself. If someone rips off your code and tries to sell it that kinda sucks, but it doesn't make your freely accessible stuff disappear. Just keep a publicly visible paper trail and focus on making stuff, which is what this all should be about.

The Gripper
Sep 14, 2004
i am winner

Internet Janitor posted:

If you want people to be able to have the code, that's awesome. It seems equally reasonable to be able to decide to keep your creative output to yourself. If someone rips off your code and tries to sell it that kinda sucks, but it doesn't make your freely accessible stuff disappear. Just keep a publicly visible paper trail and focus on making stuff, which is what this all should be about.
That's what I've always seen the GPL as previously: a way to release your code to the public and have people that use it share their modifications with the public in turn, rather than making money off it without giving anything back. Which is a great thing that I agree with completely.

Internet Janitor
May 17, 2008

"That isn't the appropriate trash receptacle."
What I'm saying is, why are you so concerned about forcing other people to open-source their derivative works? What if a software engineer working for Oracle studied some code in Clang and then used the knowledge he learned to improve proprietary software without directly stealing a single line? Isn't that "profiting without giving anything back"?

taqueso
Mar 8, 2004


:911:
:wookie: :thermidor: :wookie:
:dehumanize:

:pirate::hf::tinfoil:

"Without directly stealing a line" is quite a bit different than creating a derived work.

ShoulderDaemon
Oct 9, 2003
support goon fund
Taco Defender

Internet Janitor posted:

What I'm saying is, why are you so concerned about forcing other people to open-source their derivative works? What if a software engineer working for Oracle studied some code in Clang and then used the knowledge he learned to improve proprietary software without directly stealing a single line? Isn't that "profiting without giving anything back"?

I would argue that's not a derivative work under US copyright law. Fair use allows studying or works "inspired" by other works; if there's no direct copying, there isn't derivation. (IANAL, This Is Not Legal Advice)

The Gripper
Sep 14, 2004
i am winner

Internet Janitor posted:

What I'm saying is, why are you so concerned about forcing other people to open-source their derivative works? What if a software engineer working for Oracle studied some code in Clang and then used the knowledge he learned to improve proprietary software without directly stealing a single line? Isn't that "profiting without giving anything back"?
Yes but this way I don't have to do any extra work to improve my code (because someone else has done it for me!).

(I don't actually have an answer and it's a good question, what makes modifying code more important than studying and using that knowledge to make something else, or even rewriting code in another language? Maybe it's just popular because it's easy to call out people when their code is yours copy-pasted with modifications.)

PDP-1
Oct 12, 2004

It's a beautiful day in the neighborhood.

Internet Janitor posted:

I just don't think it's very cool to say "you're free to use this code I put on the internet BUT ONLY IF YOU SUBSCRIBE TO MY NUANCED, HEAVILY POLITICIZED BELIEFS AND ALSO YOU'D BETTER NOT BE SOME EVIL CORPORATION WHO WILL PROFIT FROM MY BRILLIANT IDEAS!"

Nothing in the GPL objects to making a profit off of open source code. Tons of companies are rolling in the dough due to producing products built on open sourced software.

It boils down to the statement that if you want to use someone else's work in your project then they get a say in how it's used. If they're happy to sell you a license for a fee then you pay that fee. If they require that you release your modifications then you release your modifications. If you aren't happy with either of those scenarios then develop your own stuff.

Suppose I wanted to profit from using a computer with a pirated copy of Windows 7 installed. Am I in the wrong, or is it just not very cool of Bill Gates to say that his wishes to be paid for that software were violated? If I then profit from GPL'd code but don't release my modifications, am I in the wrong or is it just not very cool of the person who wrote it to say that their wishes for released source code were violated?

Internet Janitor
May 17, 2008

"That isn't the appropriate trash receptacle."
To be clear, I respect software licenses and intellectual property laws. However, I feel that if an individual is considering using a GPL license, they should re-evaluate their motivations for sharing in the first place. I strongly encourage others to consider instead using a non-viral creative commons license, the WTFPL or, best of all, placing their works in the public domain.

Internet Janitor fucked around with this message at 03:48 on Mar 23, 2012

Blotto Skorzany
Nov 7, 2008

He's a PSoC, loose and runnin'
came the whisper from each lip
And he's here to do some business with
the bad ADC on his chip
bad ADC on his chiiiiip
For me it's pretty simple. If you want to use my work, great! You can either share alike, or you can pay me. Or you can go use somebody else's work! Everyone wins!

Jabor
Jul 16, 2010

#1 Loser at SpaceChem
I kind of like the LGPL, as it feels more like "hey if you make improvements to my stuff please pass them back upstream" while not really caring what people do with their own code.

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe
For those who like the idea of GPL without all the craziness, there's the MPL which basically says "any modifications to the source text must be made available". Basically, "I want to know about all the modifications to stuff I wrote". Other than that, there's no restrictions about commercial usage or whatever.

Of course, this matters little for a dynamic language where monkey-patching is available -- you can get around this restriction by modifying the library without modifying the source text, but my personal take on it is that if some company is willing to work around small limitations like that rather than talk to me, I don't want to talk to them anyway.

ShoulderDaemon
Oct 9, 2003
support goon fund
Taco Defender

Internet Janitor posted:

best of all, placing their works in the public domain.

Please never ever ever encourage someone to place code in the public domain. Please don't do it yourself. The WTFPL is enormously better than public domain declarations.

Why? Because in a lot of countries, it is actually impossible for an author to release their own work into the public domain. Or it requires a specific registration, which may cost money. Or it requires auditable documentation of everyone who may have ever contributed to the work. Or it only applies to people who received the work by physical mail. Or numerous other crazy restrictions.

And that means that in a lot of the world, you just can't use this supposedly "public domain" software. Any license is better than public domain declarations.

Yes, I have run into problems from this on real-world projects, and I've had to harass some poor coder into agreeing to give me their software under the MIT license instead of "public domain" which just wasted a few hours of their and my time so that I won't get attacked by a lawyer.

I know it seems like "public domain" should be the least-restrictive thing you can do, but it's really not. Because of the specific legalities involved in that phrase, it's a huge tarpit that is better off avoided.

The Gripper
Sep 14, 2004
i am winner

ShoulderDaemon posted:

I know it seems like "public domain" should be the least-restrictive thing you can do, but it's really not. Because of the specific legalities involved in that phrase, it's a huge tarpit that is better off avoided.
A lot of companies treat public-domain code the same way they'd treat code they found in the street as well: having no license is the same as having a license but not being able to find it. Having nothing to refer back to when someone comes and claims you've stolen their code only works in your favor if the code is so well-known that it's easy to prove (i.e. public domain is great for works like music, movies, art, because generally there are a lot of references out there to verify original ownership and public domain status).

Lonely Wolf
Jan 20, 2003

Will hawk false idols for heaps and heaps of dough.
gah just make a thread about licenses already.

That Turkey Story
Mar 30, 2003

Lonely Wolf posted:

gah just make a thread about licenses already.

Yeah, seriously, this is getting way off topic. Besides, everyone should be using the Boost Software License anyway.

Sinestro
Oct 31, 2010

The perfect day needs the perfect set of wheels.

Lonely Wolf posted:

gah just make a thread about licenses already.

A licensing thread

Beef
Jul 26, 2004

That Turkey Story posted:

You can initialize them fine in C++11. Are you using GCC? I believe it supports it already.

code:
your_constructor( your params )
  : your_array { array, or_, aggregate, initialization }
{
  // your constructor body
}

not in 4.5.x :(

I cannot find the reference to that proposal, is it non-static data member init ?

That Turkey Story
Mar 30, 2003

Beef posted:

not in 4.5.x :(

Support has been there at least since 4.6 (4.7 was released yesterday).

Beef posted:

I cannot find the reference to that proposal, is it non-static data member init ?

No, it's Uniform Initialization.

Zombywuf
Mar 29, 2008

Just a little something on the subject of the Maybe functor:
code:
psql> select 'prepend ' || 'a string';
     ?column?     
------------------
 prepend a string
(1 row)

psql> select 'prepend ' || NULL;
 ?column? 
----------
 
(1 row)
Why the weird syntax Haskell?

revmoo
May 25, 2006

#basta
I'm on thin, thin ice at my company for pointing out SQL injection flaws. I give up. I'm sorry, but saying you can't only validate forms in the browser is not an offensive remark in any way. gently caress.

csammis
Aug 26, 2003

Mental Institution

revmoo posted:

I'm on thin, thin ice at my company for pointing out SQL injection flaws. I give up. I'm sorry, but saying you can't only validate forms in the browser is not an offensive remark in any way. gently caress.

Were you nailing the boss's daughter in front of him as you said this? :psyduck:

That Turkey Story
Mar 30, 2003

He probably just said it in the manner that you'd expect a goon would.

revmoo
May 25, 2006

#basta
I mentioned in passing that you should probably have server-side validation for a forms infrastructure that runs behind several hundred websites. Apparently development is 'sensitive' and it's offensive to mention things that could or should be done in a different manner. Yesterday I had the director of software development have a meltdown at my desk because I said something about code comments. I'm going to start looking for something else.

tef
May 30, 2004

-> some l-system crap ->
You may have found some more obvious signs of a terrible environment earlier on, beyond emotional-driven-development.

tef
May 30, 2004

-> some l-system crap ->
I have worked in a place where we weren't allowed to do a source code review in case someones feelings got hurt. :dominic:


(the company was a security testing/auditing firm)

tef fucked around with this message at 19:31 on Mar 23, 2012

baquerd
Jul 2, 2007

by FactsAreUseless

revmoo posted:

I mentioned in passing that you should probably have server-side validation for a forms infrastructure that runs behind several hundred websites. Apparently development is 'sensitive' and it's offensive to mention things that could or should be done in a different manner. Yesterday I had the director of software development have a meltdown at my desk because I said something about code comments. I'm going to start looking for something else.

What's your role in the company? It sounds like you're not in development and you were condescending to tell them how to do their job. Even if you're right you're wrong (as you found out).

Optimus Prime Ribs
Jul 25, 2007

Saw this posted on a different message board:
code:
if (_root.pic_1.hitTest(_root.hit_1) == true)
{
    if (_root.pic_2.hitTest(_root.hit_2) == true)
    {
        if (_root.pic_3.hitTest(_root.hit_3) == true)
        {
            if (_root.pic_4.hitTest(_root.hit_4) == true)
            {
                if (_root.pic_5.hitTest(_root.hit_5) == true)
                {
                    if (_root.pic_6.hitTest(_root.hit_6) == true)
   {
                        if (_root.pic_7.hitTest(_root.hit_7) == true)
                        {
                            if (_root.pic_8.hitTest(_root.hit_8) == true)
                            {
                                if (_root.pic_9.hitTest(_root.hit_9) == true)
                                {
                                    if (_root.pic_10.hitTest(_root.hit_10) == true)
                                    {
                                        if (_root.pic_11.hitTest(_root.hit_11) == true)
                                        {
                                            if (_root.pic_12.hitTest(_root.hit_12) == true)
                                            {
                                                if (_root.pic_13.hitTest(_root.hit_13) == true)
                                                {
                                                    if (_root.pic_14.hitTest(_root.hit_14) == true)
                                                    {
                                                        if (_root.pic_15.hitTest(_root.hit_15) == true)
                                                        {
                                                            if (_root.pic_16.hitTest(_root.hit_16) == true)
                                                            {
                                                                if (_root.pic_17.hitTest(_root.hit_17) == true)
                                                                {
                                                                    if (_root.pic_18.hitTest(_root.hit_18) == true)
                                                                    {
                                                                        if (_root.pic_19.hitTest(_root.hit_19) == true)
                                                                        {
                                                                            if (_root.pic_20.hitTest(_root.hit_20) == true)
                                                                            {
                                                                                if (_root.pic_21.hitTest(_root.hit_21) == true)
                                                                                {
                                                                                    if (_root.pic_22.hitTest(_root.hit_22) == true)
                                                                                    {
                                                                                        if (_root.pic_23.hitTest(_root.hit_23) == true)
                                                                                        {
                                                                                            if (_root.pic_24.hitTest(_root.hit_24) == true)
                                                                                            {
                                                                                                if (_root.pic_25.hitTest(_root.hit_25) == true)
                                                                                                {
                                                                                                    if (_root.pic_26.hitTest(_root.hit_26) == true)
                                                                                                    {
                                                                                                        if (_root.pic_27.hitTest(_root.hit_27) == true)
                                                                                                        {
                                                                                                            if (_root.pic_28.hitTest(_root.hit_28) == true)
                                                                                                            {
                                                                                                                if (_root.pic_29.hitTest(_root.hit_29) == true)
                                                                                                                {
                                                                                                                    if (_root.pic_30.hitTest(_root.hit_30) == true)
                                                                                                                    {
                                                                                                                        if (_root.pic_31.hitTest(_root.hit_31) == true)
                                                                                                                        {
                                                                                                                            if (_root.pic_32.hitTest(_root.hit_32) == true)
                                                                                                                            {
                                                                                                                                if (_root.pic_33.hitTest(_root.hit_33) == true)
                                                                                                                                {
                                                                                                                                    if (_root.pic_34.hitTest(_root.hit_34) == true)
                                                                                                                                    {
                                                                                                                                        if (_root.pic_35.hitTest(_root.hit_35) == true)
                                                                                                                                        {
                                                                                                                                            gotoAndStop(6);
                                                                                                                                        } // end if
                                                                                                                                    } // end if
                                                                                                                                } // end if
                                                                                                                            } // end if
                                                                                                                        } // end if
                                                                                                                    } // end if
                                                                                                                } // end if
                                                                                                            } // end if
                                                                                                        } // end if
                                                                                                    } // end if
I... :stare:

That Turkey Story
Mar 30, 2003

revmoo posted:

I mentioned in passing that you should probably have server-side validation for a forms infrastructure that runs behind several hundred websites. Apparently development is 'sensitive' and it's offensive to mention things that could or should be done in a different manner. Yesterday I had the director of software development have a meltdown at my desk because I said something about code comments. I'm going to start looking for something else.

In my anecdotal experience, this is not uncommon. You have to be extremely tactful when you point out problems. Programmers are mostly little babies with gigantic egos. Yes, it sucks, but you always have to be mindful of this.

That Turkey Story
Mar 30, 2003

Optimus Prime Ribs posted:

Saw this posted on a different message board:

*snip*

I... :stare:

Good thing those end braces are commented, otherwise I'd be completely lost!

Rocko Bonaparte
Mar 12, 2002

Every day is Friday!

That Turkey Story posted:

In my anecdotal experience, this is not uncommon. You have to be extremely tactful when you point out problems. Programmers are mostly little babies with gigantic egos. Yes, it sucks, but you always have to be mindful of this.
Yes. There is nothing worse in the world than a butthurt programmer. It can get downright creepy.

senrath
Nov 4, 2009

Look Professor, a destruct switch!


That Turkey Story posted:

Good thing those end braces are commented, otherwise I'd be completely lost!

Those comments make me wonder if it was auto-generated code.

New Yorp New Yorp
Jul 18, 2003

Only in Kenya.
Pillbug

That Turkey Story posted:

In my anecdotal experience, this is not uncommon. You have to be extremely tactful when you point out problems. Programmers are mostly little babies with gigantic egos. Yes, it sucks, but you always have to be mindful of this.

I got over my ego real fast by having a boss who would frequently tear me a new rear end in a top hat during code reviews. He was open to being convinced that his criticisms were invalid or unimportant, but he was usually right, and he expected the same brutal honesty when his code was being reviewed.

Of course, I've dealt with people who got all pissy when given constructive criticism, mainly because I was 20 years younger than them and "didn't understand" the "real world". I don't work with those people anymore.

Optimus Prime Ribs
Jul 25, 2007

senrath posted:

Those comments make me wonder if it was auto-generated code.

I want to believe that a person didn't willingly type that out.
But I'm too cynical. :(

Strong Sauce
Jul 2, 2003

You know I am not really your father.





Optimus Prime Ribs posted:

I want to believe that a person didn't willingly type that out.
But I'm too cynical. :(

Do you think those programmers ever wonder, "drat I wish there was an easier way to do this. If only there were some sort of thingy that can hold all these similar items!"

I had something similar when I worked at company a few years ago. My company was expanding and hired a guy without ever asking me if I wanted to talk to him

Anyways, we don't interact much since his projects aren't the projects I'm working on for the site. But finally, I had to take over for one of his projects and as I'm browsing through the code, I see some code that outputs html like this.

code:
for ($i = 0; $i < $num_fields; $i++) {
  echo "Field " . $i . "<input name='field_" . $i . "'> ";
}
and then to process it
code:
for ($i = 0; $i < $num_fields; $i++) {
  if ($_GET['field_'.$i] == "BLAH") {
    // do stuff
  }
}
:stare:

Needless to say, I ended up fighting constantly with him.

Adbot
ADBOT LOVES YOU

moynar
Apr 15, 2006
Hello!
The latest software scandal in Norway is a pretty big horror.

So at some point in time the Norwegian government decided that the country needed to move parts of the paper mill onto the internet. The result is the monolithic Altinn (literally "everything in") software which was developed by consultants, mostly Accenture/Avanade for about 1000 million NOK. Or about 170 million USD if you will. This handles taxes for all citizens and a lot of other important stuff.

Each year about this time the estimated taxes are released on Altinn, which is a big deal because it tells you if you have to pay extra, have money waiting for you and if you have to do excessive paperwork because someone hosed up in the paper mill when calculating your income.

Last year the system collapsed immediately when the tax returns were published. Afterwards the admins worked out that a single server was responsible for login services which is an horror in it's own right (Norway has 5 millions inhabitants) but this year they promised it would be better. It didn't go down this year, it just switched to serving a static PLEASE WAIT page for most users. And then something wonderous happened. The people responsible turned on caching in a desperate attempt to get it up and running again and suddently everyone who tried to log in got logged on as some random dude from Oslo, showing his tax returns, SSN and other personal information. Cue everything being shut down for a few days, leading to enormous losses in productivity for every single accounting firm and company using Altinn in Norway.

If I hadn't paid for it as a taxpayer I would be laughing pretty hard right now.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply