Don't forget that the majority of people see computers as tools or vehicles, and just like you have to fill your gas tank from time to time with expensive gas, they think it's perfectly normal to pay for software regularly, even when it doesn't offer new features. Just keeping it going costs money. That the upgrade from CS5.5 to CS6 is a 'Critical security vulnerability fix' is a detail most users won't even notice.
That's just like saying you should pay for car repairs when a faulty design of the cruise control made you loose control of it and crash into something.
> Adobe released a security upgrade for Adobe Photoshop CS5.5 and earlier for Windows and Macintosh. This upgrade addresses vulnerabilities that could allow an attacker who successfully exploits these vulnerabilities to take control of the affected system.
so what is it now? Still - even using security fixes as a vehicle to push people into upgrading is a bit crazy considering that the new version has just come out. Not even volunteer-supported software stops supporting the previous version the moment the new one comes out.
Why can the not just take the patch file from the commit which fixed the flaw, apply it against previous versions of Photoshop and release a upgrade for all versions instead of making people charge for it.
A better bit of advice would be "Do not use TIF files unless you have brought CS6"
Unless I'm missing something, the latest download available on that site is 2.6. I realize it's free software, so it probably is a little cheeky to complain, but it can't be a photoshop alternative if it's not available on OSX. From what I understand, the new GTK broke tablet compatibility for OSX. If anyone knows enough about those issues and the underlying languages and libraries behind GIMP, consider this an invitation to get involved: http://www.gimp.org/develop/
I'm excited about the unified interface and the new transform tool, so here's hoping it is just a couple more days.
"Fix it up" includes adding 16-bit-per-channel colour, something that photographers have been crying out for that the GIMP team hasn't managed in 15 years of trying.
GIMP 2.10’s core will be 100% ported to GEGL, and
all of the legacy pixel fiddling API for plug-ins
is going to be deprecated. Once the core is completely
ported, it will be a minor effort to simply “switch on”
high bit depths and whatever color models we’d
like to see.
More than 8bpp color depth is available in GIMP and has been so for a while now if you use the development version. GIMP was a little late to the game, but the issue has been fixed.
Also: your comment was arrogant and impolite towards the GIMP team.
Sometimes you just need a feature before it's available in a released version. You can either go get the dev version or bitch about it. I tend to do the former.
In fact, I use quite a lot of software from their development repositories, e.g. GCC and Blender. It is a very rare occasion that I come by a bug as most open source projects have sane version management practices and branching processes.
It is extremely meaningful if you, you know, actually consider the context of this thread -- which is not someone telling an artist to use GIMP, but a discussion of "fixing up" the program.
Aviary (http://www.aviary.com/) comes to mind. For the book production, PressBooks (http://pressbooks.org/) is an attempt to simplify the process and disrupt the CS based tool chain.
I am also working on something in the domain. Hoping to show it to the world very soon!
>So, is someone going to do a startup to obliterate Adobe's print and graphics production monopoly, or what?
Sure, they would just have to build a compelling set of apps, for Windows and Mac at the least, that have 90% of those features that Adobe has built to their apps since 1990.
There DO exist competing products for Adobe stuff, but they are disparate. The best of them is Quark (vs InDesign). Final Cut Pro/Avid et co do a nice work against Premiere. Inscape is quite good to replace Illustrator, maybe Corel Draw too. Gimp is not there yet, but Corel Photo-Paint and Painter combined would make a compelling proposal. So, you have parts here and there, but not streamlined nor combined. And for all the "bloat talk", Photoshop can handle huge images with ease whereas lesser programs throw the towel even at 200MB or so.
(We have tons of 20% solutions -- they are not any good for professional printing and graphics work with the ease and breadth current designers are used to, even missing extremely critical parts, like CMYK in some cases).
We have tons of 20% solutions -- they are not any good for professional printing and graphics work
Yes, that's the real problem.
None of the OSS offerings is really anywhere close to the equivalent CS tool yet: not Inkscape, not the GIMP, not Scribus.
Quark and Corel should have the pedigree, but last time I had this conversation I looked up the latest features in Corel's graphics software, and it's basically a second-tier player these days. I've never used Quark, but the picture painted by others looks similar.
The thing that puzzles me is why no-one has yet come up with a credible competitor to CS (or, similarly, to MS Office). Two of the most successful software companies on the planet make a very significant chunk of their profits on these product lines, and they are certainly open to disruption by competition based on usability and/or quality/reliability as well as functionality and workflow. Of course there's a substantial barrier to entry, but it's not that unassailable in software terms.
There are also network effects at play - your co-workers create .psd files, and your printing company takes .psd files, so you use Photoshop. There is also ample training material, frequent conferences, etc.
That was Corel's problem - not matter how good a tool they made, printers either could not open the files, or were scared off by bad experiences with previous versions.
Google docs has only succeed because "close enough" formatting was good enough for business docs and spreadsheets. Not so in graphic design.
Actually, Google Docs has not succeeded. You and I may used, but last time I checked it had something like a 1% share of the "office suite" (i.e if you include desktop Office et al).
You're not going to see an OSS app that competes in the professional printing world unless it's sponsored by someone with deep pockets. It simply is not practical for lone hackers, no matter how talented, to crank out code that produces the correct results for graphics professionals without having hundreds of thousands of dollars worth of esoteric equipment to run tests (and debug) on. You'll waste thousands of dollars in film/paper alone just testing your feature set on a single model of imagesetter. This is one of Adobe's strengths: massive familiarity with high-end graphics output devices.
Quark was the Adobe of their time. If you thought the licensing of Adobe is intrusive now you should here the stories of Quark licensing in the 90s. They took piracy paranoia to an insane level. And the companies that bought Xpress sometimes reverted to the pirated copies because at least those worked.
Indesign 1.0 definitely did not. It was Quark's market to lose and by Indesign 2.0 prepress shops were just starting to take Indesign files. The rest is history.
The designers I worked with at the time were early proponents of InDesign and basically told printers: "If you want our business, you'll have to buy InDesign." They did.
Quark became more and more user-hostile through the 90s, basking in the dominant market share of their (essentially) single product. Prices went up, the feature set stagnated, anti-piracy measures punished the honest, and Quark tried to push ill-conceived "multimedia" and web features into the product. Focus was lacking not only in their product, but in how the company was run: development and support were moved to India, and then a few years later moved right back. And despite all this, in terms of dominance Quark XPress was like the Photoshop of its time: with all the professional workflow based on the product, the ecosystem of expensive plug-ins, and the people whose jobs were practically defined by their Quark expertise, it was difficult to imagine how any competitor could gain traction.
But Quark's unpopularity with its captive customers created a fertile field of potential good will for anyone with the gumption to try jumping in. And the nimble upstart who finally gained traction was of course Adobe. InDesign was cheap, good, addressed many of the long-term unresolved Quark pain points, and, despite bugs and shortcomings, held the promise of a future outside Quark's cloak.
A decade later, where are we?
The creatures outside looked from pig to man, and from man to pig, and from pig to man again; but already it was impossible to say which was which.
Granted it's only image editing. And it's mac only. But I've pretty much stopped using Photoshop because of it. Though, I've never use any of the advanced Photoshop tools.
Many graphics folk on Photoshop are stuck cause they can't see any other product filling Photoshop's role.
Are they allowed? Consumer protection laws in the UK suggest that up to a year after purchase one may be able to get a full refund or a fixed product at the customers choosing ... not sure why/if that differs for some reason with digital products.
I'd guess most copies are bought by businesses whom such laws don't aid.
It probably isn't difficult to get around such laws in light of the fact that you're actually purchasing a license to use the software and not in fact buying the software. The license-purchase paradigm usually means the vendor can do whatever they please, up to and including pulling the software right off your machine should they feel like it. Examples of the aforementioned include the kindle book scandal and sony pulling games out of their online marketplace that people had already paid for.
Wow. I don't even. Not that I advocate hacking, but it would be righteously ironic if some of Adobe's employees hadn't upgraded to CS6 yet, and someone broke into their systems using this vulnerability.
They have been lazy in essence. They decided not to backport the fix because it is too hard or it didn't fit in the schedule to ship CS6 out of the door.
Those of you who are surprised must not be actual Adobe customers. Only when you've been through the process of handing of thousands of pounds for their software will you realise how awful a company they actually are.
It's a more of a subjugation than a transaction, like a sacrifice to a cruel god, the cherry on the cake is you have to actually wait until a person "approves" your purchase/sacrifice.
Or they could have pushed a minor security upgrade that fixes this bug. For free. It's probably a simple buffer overflow bug and can be fixed with a change to only a few lines of code. After the problem has been identified, it takes roughly 10 minutes of coding to fix the issue and perhaps a day or two for regular testing and distribution processes.
It means Adobe is not aware of any attack exploiting these in the wild. They're declaring this security bulletin a priority 3 which reads[1]:
> This update resolves vulnerabilities in a product that has historically not been a target for attackers. Adobe recommends administrators install the update at their discretion.
If a car company sells you a car engine that bursts into flames, they're still held liable for damages. They can't just say "Uhmm... The engine may burst into flames, you should buy our next model".
The fact that Adobe can get away with this amazes me! With the theoretical engine problem you need to recall/repair each and every engine individually. With software, once you've developed the patch you can distribute it at next to no cost. There's no excuse for this.
Why can software engineers and companies get away with such horrendous practices?
Why can software engineers and companies get away with such horrendous practices?
Because most of us who write software believe that the risks associated with effectively zero liability for software failure are far outweighed by the costs of government intervention. General purpose software is far too "easy" to create for mandatory liability to make any sense.
The better solution is for the market to demand simple security fixes in situations like this.
[Edited to clarify that software risk is less costly than government intervention]
They're not lazy. If you've ever used Fireworks in the Macromedia days and compare it to the massive behemoths of slowness they've added to each subsequent CS version, I can only conclude that they're not lazy. An effort this concerted to make no progress in ten years and add naught but a twenty second startup time on processors that weren't even conceived back in Macromedia Fireworks 8 days cannot be a product of laziness.
Just like I think that this here thing doesn't have anything to do with laziness. It's that Adobe wants you to pirate the crap out of CS6, because they know they won't get money from you anyway. They do know, however, that every cent they don't get directly from you is a cent they'll get from your future employer or customer or small business which is forced to buy Adobe CS6. It's not laziness, it's doing exactly what they need to to make sure that they keep their repeat customers upgrading.
Microsoft have the technical capability to deactivate pirate installs of Windows through WGA. Instead, they choose to display a nag message and disable software updates. Microsoft spent a ton of money developing a really sophisticated anti-piracy system, but decided against using it to prevent piracy by end-users. To me, that speaks volumes about how piracy fits into their business strategy.
The CS6 sub offer (50 bucks a month for everything) and preorder for old customer special ($30 bucks a month for everything) are making TONS of people sign up.
I am not so sure that they are lazy, per se - but I will say they have zero cult of personality in that company.
Name one famous employee of adobe along the same lines you would recognize with any of the tech titans: gates, jobs, ballmer, brin, zuck, etc. etc. etc.
Never has an Adobe's leader's name been in that list.
The reason this is important - is that there is no personal image attached to adobe's products. This lets them get away with more mediocrity than you would see with any of the above.
You don't have the scorn of the user all pointed at one person's identity - you have it pointed at the nebulous "adobe" as a whole.
If they had a charismatic, public figurehead I a sure there would be a lot different about how we view adobe and its products.
I was thinking this the other day, and given that Adobe is a company that could struggle with the demise of Flash on the web and growing discontent over its core product line the time is almost right for an evangelist to take control and make sweeping changes. If a person came along and made drastic changes, such as the re-branding of Flash, a complete overhaul of the Adobe Creative Suite and the stripping-down of the PDF format I can see a lot of people turning their heads.
There's an old joke - field marshal Model is asked the secret of his success as a commander. He says the key is managing the men under you. They are smart or stupid, energetic or lazy. The smart and energetic make excellent field commanders, the smart and lazy make good staff officers, and the lazy and stupid can handle supply. And the lazy and energetic? Transfer them elsewhere.
Adobe isn't lazy. It takes extra work to implement multiple cross platform ui libraries with twenty different slider widgets none of which work quite right.
Please stop comparing software with real world objects.
While popular the comparison between cars and computer programs are not well chosen. Actually comparing software to any physical object is point-less. These two only have anything in common on the surface.
If you were to make software require the rigorous testing that physical products like cars undergo you would likely never be able to ship anything. If you did the customer would not be willing to pay the price.
Software is infinitely more complex than even space shuttles. The number of possible combinations which you program can traverse is so big it doesn't make any sense.
You could of course start proving mathematically that your software will always behave correctly. This would require you to use a language which facilitates such a method like erlang. No more web development in PHP, Ruby, JavaScript or anything else which relies on probabilistic garbage collection.
I guarantee you that once you spend the money having your code proven your costs are so high that no one will buy your software. In stead they'll turn to the competitor who wrote it in VB and accept their EULA and live with any errors.
The nature of software is not the same as of physical objects. You can either accept this and plan accordingly or you can betray yourself and keep getting angry about bugs.
"Software is infinitely more complex than even space shuttles"
Hardly.
I write software for fun, everything from low level drivers up the stack to web apps. My job is engineering mechanical systems more complex than the space shuttle - and with more lives at stake.
doc4t's next sentence ("The number of possible combinations which you[sic] program can traverse is so big it doesn't make any sense.") is critical in understanding the sentence you quoted. Writing software is not so complex, but guaranteeing its operation is insanely complex.
And how is that different from a mechanical system?
We have fatigue/vibration, corrosion, and wear. What's the equivalent in software? There is a reason they park perfectly good airplanes in the desert - we can't gaurentee they won't fall out of the sky because it's impossible to perfectly predict fatigue.
And I have issues all the time related to things failing 3 or 5 years after they were built (yet they have a 40 year design lifetime). Metals always seem to find a new way to corrode and bearings find new ways to fail. There is no equivalent to a corrosive, hostile, environment in software.
Not to mention the random things thrown at you in the physical world. If you design jet engines, be prepared for birds to get sucked in (hopefully not too many, and if so, hopefully your pilot can land in a nearby river full of ferries to pickup the passengers). If you design buildings, get ready for earthquakes of unknown size, hurricanes of unknown wind speed, and terrorists with various methods of taking your structure down.
We can't gaurentee anything. In fact we can barely test most of the complex stuff because it's too expensive. Cars are cheap relative to most things. They don't crash 737s to find out what happens or shake an entire city just to ensure that it is built correctly. You have to predict all of this stuff using calculations and it largely goes untested.
> And how is that different from a mechanical system?
Most mechanical components obey underlying physical principles that have linear or quadratic approximations, at least in certain regimes of environmental and other factors. Therefore, we can model the component and we can know when we are unable to model it.
We manage overall system complexity via physical/mechanical modularization, with things to insulate against thermal, mechanical, chemical, electrical coupling. By testing individual components, we have basic assurances on overall system behavior.
Software attempts to do this with "good design principles", but the truth of the matter is that just about any software component in a typical application can completely jack up the global environment for other components, and processes can make OS and environment modifications that completely break other processes belonging to the same user.
Try issuing performance guarantees on an airplane whose fuel pump can set μ0 and ε0 to -1 if the ground crewman that filled the wing tanks was named "Bob Null".
Computers are physical machines that obey the laws of physics. Flipping bits at a lower microcontroller level can be observed as literally directing electrons to travel to specific chip pins.
With unit tests and behavioral tests, we can assume basic assurances on individual components working as a whole.
Engineering also has good design principles. One does not make gear teeth perfectly angular (take a look at the Antikythera Mechanism) because it can lead to premature wear and will have poor performance. In fact, there are hundreds if not thousands of kinds of gear teeth, and interchanging them within the same application can have all kinds of long lasting effects. Take a look into any vehicle recall in the past 2 decades and see that nearly every one of them is an edge case bug that slipped by Q&A.
Not accounting for the string null being valid is a bad design principle within the domain of software. Just as using Frozen water as a bearing surface in high speed rotational machines (Hey! It's hard and slippery! It's perfect!) is a stupid mistake, not accounting for valid "Bob Null"s will also lead to premature failure if not for the database but for the business.
We've only been at software engineering for less than a hundred years. We've been at mechanical engineering for a good 2000 (see the aforementioned Antikythera). We might need a few more years to iron out best practices as an industry.
Here's the thing: physical processes and failures tend to average out to nice smooth functions with Gaussian distributions. Each additional random variable has a minimal contribution to the average state of the system. Wear and tear tends to accumulate gradually over time until some mostly predictable breaking threshold is met.
With digital computers, however, the size of the state space that the system can occupy grows exponentially with the number of bits of state in the system, and changing a single bit can result in an explosive cascade of changes to the rest of the system[0]. Accumulated random failures of computer software very rarely lead to a nice, smooth, predictable probability distribution. Software failures are not caused by anything remotely resembling wear and tear.
[0] Please excuse and correct any inadequacies in my autodidactically acquired understanding of information complexity.
Read Feynmans analysis of the Challenger disaster if you want to see just how well an physical engineering problem can grow exponentially due to changing the properties of a single bit - a difference in temperature of a few degrees changing the mechanical properties of a rubber o-ring in that case.
I never did any mechanical engineering so I trust your statement.
It's still a good example when trying to convey the complexity of software to people who don't understand computers since most have an idea that space shuttles are very complex (which they of cause are)
My point was that that testing all possible combinations of how your app can execute is next to impossible unless you are willing to cough up a serious amount of money for rigid mathematical proving. Which would then make it too expensive.
I think it does a disservice because it overlooks the fact that people have figured out how to solve these problems.
All engineers are human. Whether you are working on a space shuttle, an airliner, a nuclear power plant, or an iPhone app, you are a human. Humans make mistakes. Humans overlook things.
So how do we engineer really complex systems with hundreds or thousands of lives at stake to an exacting standard - knowing that the engineers are human?
The answer is to build a process that catches mistakes. I don't think software engineering has really caught up with mechanical engineering in terms of process.
I know a lot of guys who love to wrench on cars. They swap parts, add horsepower, change out the suspension, etc. They can build a really fast car. But that's not mechanical engineering. They are mechanics.
In a lot of ways writing software is like that. Glue together some libraries and APIs the same way a tuner supercharges an engine. But that isn't engineering.
Obviously we don't need the rigour of the space shuttle to make an iPhone app, but if your application calls for that complexity (or your budget/liability is large), then you need to bring in the process mechanical engineers have been using for the last 60 years.
That means multiple people checking all the code. That means a well planned out arrangement/architecture. That means testing the individual parts thoroughly and the whole system together. And it means very specific configuration managament of every dependency.
It's not impossible, it's just not the willy-nilly fun part of hacking stuff together. It's the ugly paperwork inducing lame part of working in a big company. But that process if done correctly helps catch mistakes.
"The answer is to build a process that catches mistakes. I don't think software engineering has really caught up with mechanical engineering in terms of process."
I agree. I'm not sure it ever will. But comparing software to a car and the relationship between the buyer and seller is too simplified. Software have bugs. Many more bugs than cars. Because it's not tested properly. Which we don't do because no one would buy it at the price which comes from proper testing.
You can accept this and write your contract accordingly or you can sit down, muck and be disappointed when it fails.
I'm not saying it's right - it's just how things are.
You can build software as reliable as a car, but that's not the issue. You cannot build software with all of the features desired by management in the time allotted and also make it robust. It's a matter of priorities, and robustness is not Adobe's priority.
Although you're right that for some projects, the poor quality is because it's more fun to just hack it together, but for many, it's a matter of business priority. I've worked on projects (avionics software) that had the rigor that you describe. I've also worked on projects where the developers consistently tried to add robustness, but management kept redirecting them to add more features.
There was actually a great story of the Space Shuttle software engineering team and their development practices. Generally speaking, they wrote code with zero bugs. Like...NONE. For 25 years.
They did it with an almost insane level of attention to detail.
Thanks for that link. I really like krschultz's parent comment and your follow up. Does anyone know how to get a single-page view of that article, though?
The process maturity index which used NASA/JPL as its exemplar was the big IT management fad of the late 90s (it dovetailed nicely with ISO9000 TQM) before XP and then Agile became popular.
In a sense, the problem with Adobe seems to me to be the alignment of organizational goals with user benefits, and not software process.
I don't have any experience with engineering mechanical systems, but I think there are at least aspects of software that are more complex than building physical things.
Software is expected to scale by many orders of magnitude in many dimensions. The equivalent would be a vehicle that supports carrying between 1 and 1 million people, can travel anywhere between 1 and 1 million mph, running off fuel between 1 and 200 octane. Physical objects are never expected to support such wide scaling parameters, and yet this is very common in software.
Software is also expected to run on lots of different kinds of hardware with different features and performance characteristics. A rough analogy is a physical design that has to support being constructed from either aluminium or steel.
Since software is more abstract in nature, you'll often hear people saying that they weren't even sure what they were building until version 2. The requirements are also more likely to change during the engineering process. Mechanical things seem more likely to have a well-defined purpose and scope throughout the engineering process.
Eh, I don't really buy any of that. Have you actually worked in the mechanical engineering world? I feel like it's far more gray than software engineering. I might have a specs on the output, but the environment is the actual physical world with all of its problems. Corrosion, temperature, vibration, dirt, dust, etc. It just screws with you the entire time. The abstract environment of a computer is tame in comparison. The only thing you have to worry about is the dependencies - which is basically configuration managament. Configuration managament is a problem in the mechanical world too. Except if you design a power plant to Rev B of the drawing, and show up with a Rev A drawing part that doens't fit, you might be out millions of dollars and months of times because there is no 'recompile' button when it comes to giant machined parts.
As for your specific examples, 'different kinds of hardware' is no different than saying my system needs to work at -30F and 130F temperature. Materials behave very differently at different temperatures and we have to account for that. Some metals are weaker in temperatures as high as +25F. That's something you will see all the time.
You are also vastly over-rating the complexity of scaling. It's really not that hard. Are you really going to tell me it's harder to figure out how to scale a web site than it is to build a rocket engine? Because there are about 1,000 web sites out there with millions of users and only about 10 organizations building rockets.
> Have you actually worked in the mechanical engineering world?
No (which I admitted up-front). But have you ever worked on large, high-availability distributed systems? When you say that scaling is "really not that hard" I'm suspect that the answer is no. It is absurdly more complex than single-machine programming. There may be more people building large websites, but that probably has a lot to do with the fact that a lot more people visit websites than ride on rockets. If you look at the number of support staff needed to run a website like Amazon vs. launch a rocket, I bet they wouldn't be that far off.
I'm not saying mechanical engineering is easy, I'm just saying the software isn't easy either. I also don't think that you can draw the conclusion that because we have 60 years of mechanical engineering process that software should fit into the same processes.
Having worked on large scale systems I would agree with him. Scaling is only hard when you completely ignore it at the design phase. IMO, designing scalable systems is often easier, because they need to be loosely coupled to handle failures. Honestly, I think most of the hard real world software problem tend to deal with legacy systems and the near organic mess that builds up over time.
So what's your database system like. Well, we are 1/2 though the transition between A and B, we don't have a DBA so Bob wrote something to create build scripts based on changes made in this file. It's buggy and we are starting to try out C but if you ...
These papers all describe solutions to "hard real world software problems" and have nothing to do with legacy systems. If you think there aren't hard problems in software, you're probably not working on one.
The OP are not comparing cars to software. They are comparing the natures of the commercial relationship between the owner and the car manufacturer and between the user and Adobe. Expecting free "recalls" from Adobe is not unreasonable.
Exactly. I was not saying software should be theoretically guaranteed -- the responder just assumed that.
Adobe has a fix to a serious vulnerability. Not releasing it when the cost to them is tiny is essentially criminal negligence, especially when they say the fix is available to those who are willing to pay...
This is the same company that owns Flash which runs on >99% of the desktop machines connected to the Internet.
You point out that real world comparison is pointless, fail to elucidate why, and then go and make some of your own comparisons with the space shuttle program...
Ok. The possible combinations of the way your application can (theoretically) run far outnumbers the estimated number of atoms in the visible universe - even for small programs. You just need a couple of loops in loops. If your program don't have it then I'm sure Node, Apache, Postgres, Rails whatever have plenty.
While many of these combinations may never happen you would still have to provide proof of all of them not causing your program to go into a state which you can not handle.
"and then go and make some of your own comparisons with the space shuttle"
This was a comparison of complexity - not a direct comparison between the two.
The possible combinations of the way your application can (theoretically) run far outnumbers the estimated number of atoms in the visible universe - even for small programs. You just need a couple of loops in loops.
Can you elaborate on this? I'm not convinced that this is true (but am willing to be proven wrong)
I ment the whole stack...not just a single fizzbuzz snippet.
As I see it this is what is going on when your users use a webapp.
The user runs some client code which you wrote. In a browser which other guys wrote. Running on an OS made by some one. Sending data back and forth via protocols and network equipment with software that other people wrote.
You server OS receives the request and passes it to your load balancer which distributes to Apache which forwards to PHP which routes to SQL...and all the way back.
With the millions and billions of lines of code involved in these steps it could likely be a number of this magnitude.
> Software is infinitely more complex than even space shuttles.
That is not an inherent property of software, the problem with software is that it makes it all too easy to hide complexity, and that some of the costs of complexity are not superficially apparent.
Add on top of that how in the name of 'reuse' we pile more and more layers of complexity, and you end up with systems that are humanly incomprehensible.
But this doesn't mean that writing simple yet functional software is not possible, it just requires much more care, thought and self-discipline.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies." — C.A.R. Hoare
"The computing scientist's main challenge is not to get confused by the complexities of his own making."
— E. W. Dijkstra
Most software complexity is of our (programmers) own making.
You seem to be arguing against consumers insisting Adobe ship defect free software as the cost would be prohibitive, which is true. But that isn't what's being discussed here.
What is being discussed: when a defect is discovered in the product by the end consumer, is it a fair (or proper, or wise) business practice to charge the customer for the software patch?
No I don't think it is alright to charge for a patch.
It was not my intention to side track the discussion. I just don't like the simplification of comparing with cars - but the OP made it clear that I misunderstood his post.
> If a car company sells you a car engine that bursts into flames, they're still held liable for damages.
Not forever! Only for 10 years, after that they are no longer responsible. Software is the same way, only the timeframe is much shorter, and there is no set standard.
Although less than a year, like CS5.5 is too short. I would suggest double or triple the usual time between major versions as a reasonable timeframe, in this case that seems to be about yearly, so Adobe should provide support for 2 to 3 years for old versions.
But if cars are renewed annually with, say, one major revision every 4-5 years then the critical lifespan should be about double the time between major upgrades. That way old products can't be killed the day they're updated.
I have Photoshop CS5. I didn't event know there was a vulnerability in it. So, after all I paid for this, there is a vulnerability which lets an attacker take control of my system... and they aren't fixing it?
Seriously... what... the... fuck. I'm never buying an Adobe product again.
So, you pirate it instead. Adobe will still win out, since you'll still keep using Photoshop and are still bound to their toolkit. You'll put it on your resume, you'll be employed by a company that buys it and has to buy it legitimately. You're not punishing Adobe unless you create a genuine replacement for the toolbox of Illustrator, Fireworks, InDesign and Photoshop and are putting those on your resume, unless you're versatile with those more open-source tools, whenever they should exist.
Is Pixelmator not a decent alternative to Photoshop? What about the GIMP? I haven't installed Photoshop in years, but then again, I'm a developer, not a designer.
I've tries using pixelmator as an alternative to photoshop. The main problems: No layer effects, no pattern fill, no paths. Good for simple stuff though.
196 comments
[ 3.2 ms ] story [ 275 ms ] threadPhotoshop, I mourn for thee.
Not only broken, broken with "critical vulnerabilities." They have no shame, do they?
You just can't make this stuff up! True creativity right there.
Here is the quote from the doc:
"Avoid Adobe products."
> Adobe released a security upgrade for Adobe Photoshop CS5.5 and earlier for Windows and Macintosh. This upgrade addresses vulnerabilities that could allow an attacker who successfully exploits these vulnerabilities to take control of the affected system.
so what is it now? Still - even using security fixes as a vehicle to push people into upgrading is a bit crazy considering that the new version has just come out. Not even volunteer-supported software stops supporting the previous version the moment the new one comes out.
The released security upgrade (not "update") for Adobe Photoshop CS5.5 is … wait for it … Adobe Photoshop CS6!
Why can the not just take the patch file from the commit which fixed the flaw, apply it against previous versions of Photoshop and release a upgrade for all versions instead of making people charge for it.
A better bit of advice would be "Do not use TIF files unless you have brought CS6"
Would US fair use cover creating a fix? Or you could just a friend's copy.
http://gimp.lisanet.de/Website/Download.html
The official 2.8 release was what, a week ago? I don't think it's a big deal if it comes out on one platform a few days late. :)
I'm excited about the unified interface and the new transform tool, so here's hoping it is just a couple more days.
They only seem to offer links to 2.8 for Snow Leopard and Lion, so that could also be an issue.
http://en.wikipedia.org/wiki/Color_depth#Deep_color_.2830.2F...
Also: your comment was arrogant and impolite towards the GIMP team.
In fact, I use quite a lot of software from their development repositories, e.g. GCC and Blender. It is a very rare occasion that I come by a bug as most open source projects have sane version management practices and branching processes.
I am also working on something in the domain. Hoping to show it to the world very soon!
Sure, they would just have to build a compelling set of apps, for Windows and Mac at the least, that have 90% of those features that Adobe has built to their apps since 1990.
There DO exist competing products for Adobe stuff, but they are disparate. The best of them is Quark (vs InDesign). Final Cut Pro/Avid et co do a nice work against Premiere. Inscape is quite good to replace Illustrator, maybe Corel Draw too. Gimp is not there yet, but Corel Photo-Paint and Painter combined would make a compelling proposal. So, you have parts here and there, but not streamlined nor combined. And for all the "bloat talk", Photoshop can handle huge images with ease whereas lesser programs throw the towel even at 200MB or so.
(We have tons of 20% solutions -- they are not any good for professional printing and graphics work with the ease and breadth current designers are used to, even missing extremely critical parts, like CMYK in some cases).
Yes, that's the real problem.
None of the OSS offerings is really anywhere close to the equivalent CS tool yet: not Inkscape, not the GIMP, not Scribus.
Quark and Corel should have the pedigree, but last time I had this conversation I looked up the latest features in Corel's graphics software, and it's basically a second-tier player these days. I've never used Quark, but the picture painted by others looks similar.
The thing that puzzles me is why no-one has yet come up with a credible competitor to CS (or, similarly, to MS Office). Two of the most successful software companies on the planet make a very significant chunk of their profits on these product lines, and they are certainly open to disruption by competition based on usability and/or quality/reliability as well as functionality and workflow. Of course there's a substantial barrier to entry, but it's not that unassailable in software terms.
That was Corel's problem - not matter how good a tool they made, printers either could not open the files, or were scared off by bad experiences with previous versions.
Google docs has only succeed because "close enough" formatting was good enough for business docs and spreadsheets. Not so in graphic design.
Quark became more and more user-hostile through the 90s, basking in the dominant market share of their (essentially) single product. Prices went up, the feature set stagnated, anti-piracy measures punished the honest, and Quark tried to push ill-conceived "multimedia" and web features into the product. Focus was lacking not only in their product, but in how the company was run: development and support were moved to India, and then a few years later moved right back. And despite all this, in terms of dominance Quark XPress was like the Photoshop of its time: with all the professional workflow based on the product, the ecosystem of expensive plug-ins, and the people whose jobs were practically defined by their Quark expertise, it was difficult to imagine how any competitor could gain traction.
But Quark's unpopularity with its captive customers created a fertile field of potential good will for anyone with the gumption to try jumping in. And the nimble upstart who finally gained traction was of course Adobe. InDesign was cheap, good, addressed many of the long-term unresolved Quark pain points, and, despite bugs and shortcomings, held the promise of a future outside Quark's cloak.
A decade later, where are we?
The creatures outside looked from pig to man, and from man to pig, and from pig to man again; but already it was impossible to say which was which.
Granted it's only image editing. And it's mac only. But I've pretty much stopped using Photoshop because of it. Though, I've never use any of the advanced Photoshop tools.
Many graphics folk on Photoshop are stuck cause they can't see any other product filling Photoshop's role.
I'd guess most copies are bought by businesses whom such laws don't aid.
It's a more of a subjugation than a transaction, like a sacrifice to a cruel god, the cherry on the cake is you have to actually wait until a person "approves" your purchase/sacrifice.
http://www.adobe.com/products/photoshop/buying-guide-subscri...
The marketing ploy will probably be that with a subscription you will always have the latest, secure, version.
That said, there is even a proof of concept available (see bottom of linked page), so this is rather serious.
Did they mean to say against Adobe Photoshop CS6?
> This update resolves vulnerabilities in a product that has historically not been a target for attackers. Adobe recommends administrators install the update at their discretion.
[1]: http://www.adobe.com/support/security/severity_ratings.html
If they seriously stick with this gameplan of making people upgrade... Just, wow.
The fact that Adobe can get away with this amazes me! With the theoretical engine problem you need to recall/repair each and every engine individually. With software, once you've developed the patch you can distribute it at next to no cost. There's no excuse for this.
Why can software engineers and companies get away with such horrendous practices?
Because most of us who write software believe that the risks associated with effectively zero liability for software failure are far outweighed by the costs of government intervention. General purpose software is far too "easy" to create for mandatory liability to make any sense.
The better solution is for the market to demand simple security fixes in situations like this.
[Edited to clarify that software risk is less costly than government intervention]
Just like I think that this here thing doesn't have anything to do with laziness. It's that Adobe wants you to pirate the crap out of CS6, because they know they won't get money from you anyway. They do know, however, that every cent they don't get directly from you is a cent they'll get from your future employer or customer or small business which is forced to buy Adobe CS6. It's not laziness, it's doing exactly what they need to to make sure that they keep their repeat customers upgrading.
Interesting. I've heard this thing before, with Photoshop and Windows too. Is there any evidence for this?
Name one famous employee of adobe along the same lines you would recognize with any of the tech titans: gates, jobs, ballmer, brin, zuck, etc. etc. etc.
Never has an Adobe's leader's name been in that list.
The reason this is important - is that there is no personal image attached to adobe's products. This lets them get away with more mediocrity than you would see with any of the above.
You don't have the scorn of the user all pointed at one person's identity - you have it pointed at the nebulous "adobe" as a whole.
If they had a charismatic, public figurehead I a sure there would be a lot different about how we view adobe and its products.
Adobe isn't lazy. It takes extra work to implement multiple cross platform ui libraries with twenty different slider widgets none of which work quite right.
Somewhere I heard a variation on this quote, attributed to Napoleon, that his solution for the dumb and enthusiastic was to "shoot them".
While popular the comparison between cars and computer programs are not well chosen. Actually comparing software to any physical object is point-less. These two only have anything in common on the surface.
If you were to make software require the rigorous testing that physical products like cars undergo you would likely never be able to ship anything. If you did the customer would not be willing to pay the price.
Software is infinitely more complex than even space shuttles. The number of possible combinations which you program can traverse is so big it doesn't make any sense.
You could of course start proving mathematically that your software will always behave correctly. This would require you to use a language which facilitates such a method like erlang. No more web development in PHP, Ruby, JavaScript or anything else which relies on probabilistic garbage collection.
I guarantee you that once you spend the money having your code proven your costs are so high that no one will buy your software. In stead they'll turn to the competitor who wrote it in VB and accept their EULA and live with any errors.
The nature of software is not the same as of physical objects. You can either accept this and plan accordingly or you can betray yourself and keep getting angry about bugs.
Hardly.
I write software for fun, everything from low level drivers up the stack to web apps. My job is engineering mechanical systems more complex than the space shuttle - and with more lives at stake.
The two are not even remotely comparable.
We have fatigue/vibration, corrosion, and wear. What's the equivalent in software? There is a reason they park perfectly good airplanes in the desert - we can't gaurentee they won't fall out of the sky because it's impossible to perfectly predict fatigue.
And I have issues all the time related to things failing 3 or 5 years after they were built (yet they have a 40 year design lifetime). Metals always seem to find a new way to corrode and bearings find new ways to fail. There is no equivalent to a corrosive, hostile, environment in software.
Not to mention the random things thrown at you in the physical world. If you design jet engines, be prepared for birds to get sucked in (hopefully not too many, and if so, hopefully your pilot can land in a nearby river full of ferries to pickup the passengers). If you design buildings, get ready for earthquakes of unknown size, hurricanes of unknown wind speed, and terrorists with various methods of taking your structure down.
We can't gaurentee anything. In fact we can barely test most of the complex stuff because it's too expensive. Cars are cheap relative to most things. They don't crash 737s to find out what happens or shake an entire city just to ensure that it is built correctly. You have to predict all of this stuff using calculations and it largely goes untested.
Most mechanical components obey underlying physical principles that have linear or quadratic approximations, at least in certain regimes of environmental and other factors. Therefore, we can model the component and we can know when we are unable to model it.
We manage overall system complexity via physical/mechanical modularization, with things to insulate against thermal, mechanical, chemical, electrical coupling. By testing individual components, we have basic assurances on overall system behavior.
Software attempts to do this with "good design principles", but the truth of the matter is that just about any software component in a typical application can completely jack up the global environment for other components, and processes can make OS and environment modifications that completely break other processes belonging to the same user.
Try issuing performance guarantees on an airplane whose fuel pump can set μ0 and ε0 to -1 if the ground crewman that filled the wing tanks was named "Bob Null".
With unit tests and behavioral tests, we can assume basic assurances on individual components working as a whole.
Engineering also has good design principles. One does not make gear teeth perfectly angular (take a look at the Antikythera Mechanism) because it can lead to premature wear and will have poor performance. In fact, there are hundreds if not thousands of kinds of gear teeth, and interchanging them within the same application can have all kinds of long lasting effects. Take a look into any vehicle recall in the past 2 decades and see that nearly every one of them is an edge case bug that slipped by Q&A.
Not accounting for the string null being valid is a bad design principle within the domain of software. Just as using Frozen water as a bearing surface in high speed rotational machines (Hey! It's hard and slippery! It's perfect!) is a stupid mistake, not accounting for valid "Bob Null"s will also lead to premature failure if not for the database but for the business.
We've only been at software engineering for less than a hundred years. We've been at mechanical engineering for a good 2000 (see the aforementioned Antikythera). We might need a few more years to iron out best practices as an industry.
With digital computers, however, the size of the state space that the system can occupy grows exponentially with the number of bits of state in the system, and changing a single bit can result in an explosive cascade of changes to the rest of the system[0]. Accumulated random failures of computer software very rarely lead to a nice, smooth, predictable probability distribution. Software failures are not caused by anything remotely resembling wear and tear.
[0] Please excuse and correct any inadequacies in my autodidactically acquired understanding of information complexity.
I humorously submit "The win32 API" and "The JVM garbage collector" as examples of hostile environments :)
And yeah, software and mech. Eng. ate tricky in very different ways.
It's still a good example when trying to convey the complexity of software to people who don't understand computers since most have an idea that space shuttles are very complex (which they of cause are)
My point was that that testing all possible combinations of how your app can execute is next to impossible unless you are willing to cough up a serious amount of money for rigid mathematical proving. Which would then make it too expensive.
All engineers are human. Whether you are working on a space shuttle, an airliner, a nuclear power plant, or an iPhone app, you are a human. Humans make mistakes. Humans overlook things.
So how do we engineer really complex systems with hundreds or thousands of lives at stake to an exacting standard - knowing that the engineers are human?
The answer is to build a process that catches mistakes. I don't think software engineering has really caught up with mechanical engineering in terms of process.
I know a lot of guys who love to wrench on cars. They swap parts, add horsepower, change out the suspension, etc. They can build a really fast car. But that's not mechanical engineering. They are mechanics.
In a lot of ways writing software is like that. Glue together some libraries and APIs the same way a tuner supercharges an engine. But that isn't engineering.
Obviously we don't need the rigour of the space shuttle to make an iPhone app, but if your application calls for that complexity (or your budget/liability is large), then you need to bring in the process mechanical engineers have been using for the last 60 years.
That means multiple people checking all the code. That means a well planned out arrangement/architecture. That means testing the individual parts thoroughly and the whole system together. And it means very specific configuration managament of every dependency.
It's not impossible, it's just not the willy-nilly fun part of hacking stuff together. It's the ugly paperwork inducing lame part of working in a big company. But that process if done correctly helps catch mistakes.
I agree. I'm not sure it ever will. But comparing software to a car and the relationship between the buyer and seller is too simplified. Software have bugs. Many more bugs than cars. Because it's not tested properly. Which we don't do because no one would buy it at the price which comes from proper testing.
You can accept this and write your contract accordingly or you can sit down, muck and be disappointed when it fails.
I'm not saying it's right - it's just how things are.
Although you're right that for some projects, the poor quality is because it's more fun to just hack it together, but for many, it's a matter of business priority. I've worked on projects (avionics software) that had the rigor that you describe. I've also worked on projects where the developers consistently tried to add robustness, but management kept redirecting them to add more features.
They did it with an almost insane level of attention to detail.
http://www.fastcompany.com/magazine/06/writestuff.html
So it certainly is possible to do.
In a sense, the problem with Adobe seems to me to be the alignment of organizational goals with user benefits, and not software process.
Software is expected to scale by many orders of magnitude in many dimensions. The equivalent would be a vehicle that supports carrying between 1 and 1 million people, can travel anywhere between 1 and 1 million mph, running off fuel between 1 and 200 octane. Physical objects are never expected to support such wide scaling parameters, and yet this is very common in software.
Software is also expected to run on lots of different kinds of hardware with different features and performance characteristics. A rough analogy is a physical design that has to support being constructed from either aluminium or steel.
Since software is more abstract in nature, you'll often hear people saying that they weren't even sure what they were building until version 2. The requirements are also more likely to change during the engineering process. Mechanical things seem more likely to have a well-defined purpose and scope throughout the engineering process.
As for your specific examples, 'different kinds of hardware' is no different than saying my system needs to work at -30F and 130F temperature. Materials behave very differently at different temperatures and we have to account for that. Some metals are weaker in temperatures as high as +25F. That's something you will see all the time.
You are also vastly over-rating the complexity of scaling. It's really not that hard. Are you really going to tell me it's harder to figure out how to scale a web site than it is to build a rocket engine? Because there are about 1,000 web sites out there with millions of users and only about 10 organizations building rockets.
No (which I admitted up-front). But have you ever worked on large, high-availability distributed systems? When you say that scaling is "really not that hard" I'm suspect that the answer is no. It is absurdly more complex than single-machine programming. There may be more people building large websites, but that probably has a lot to do with the fact that a lot more people visit websites than ride on rockets. If you look at the number of support staff needed to run a website like Amazon vs. launch a rocket, I bet they wouldn't be that far off.
I'm not saying mechanical engineering is easy, I'm just saying the software isn't easy either. I also don't think that you can draw the conclusion that because we have 60 years of mechanical engineering process that software should fit into the same processes.
So what's your database system like. Well, we are 1/2 though the transition between A and B, we don't have a DBA so Bob wrote something to create build scripts based on changes made in this file. It's buggy and we are starting to try out C but if you ...
Have you read papers like:
http://www.allthingsdistributed.com/files/amazon-dynamo-sosp...
http://research.google.com/archive/bigtable-osdi06.pdf
http://kowshik.github.com/JPregel/pregel_paper.pdf
http://www.research.ibm.com/people/m/michael/ieeetpds-2004.p...
These papers all describe solutions to "hard real world software problems" and have nothing to do with legacy systems. If you think there aren't hard problems in software, you're probably not working on one.
What's wrong with that?
Adobe has a fix to a serious vulnerability. Not releasing it when the cost to them is tiny is essentially criminal negligence, especially when they say the fix is available to those who are willing to pay...
This is the same company that owns Flash which runs on >99% of the desktop machines connected to the Internet.
Ok. The possible combinations of the way your application can (theoretically) run far outnumbers the estimated number of atoms in the visible universe - even for small programs. You just need a couple of loops in loops. If your program don't have it then I'm sure Node, Apache, Postgres, Rails whatever have plenty.
While many of these combinations may never happen you would still have to provide proof of all of them not causing your program to go into a state which you can not handle.
"and then go and make some of your own comparisons with the space shuttle" This was a comparison of complexity - not a direct comparison between the two.
Can you elaborate on this? I'm not convinced that this is true (but am willing to be proven wrong)
As I see it this is what is going on when your users use a webapp.
The user runs some client code which you wrote. In a browser which other guys wrote. Running on an OS made by some one. Sending data back and forth via protocols and network equipment with software that other people wrote.
You server OS receives the request and passes it to your load balancer which distributes to Apache which forwards to PHP which routes to SQL...and all the way back.
With the millions and billions of lines of code involved in these steps it could likely be a number of this magnitude.
Actually it's a wonder that it works...
That is not an inherent property of software, the problem with software is that it makes it all too easy to hide complexity, and that some of the costs of complexity are not superficially apparent.
Add on top of that how in the name of 'reuse' we pile more and more layers of complexity, and you end up with systems that are humanly incomprehensible.
But this doesn't mean that writing simple yet functional software is not possible, it just requires much more care, thought and self-discipline.
The two top quotes listed here are worth remembering: http://quotes.cat-v.org/programming/
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies." — C.A.R. Hoare
"The computing scientist's main challenge is not to get confused by the complexities of his own making."
Most software complexity is of our (programmers) own making.What is being discussed: when a defect is discovered in the product by the end consumer, is it a fair (or proper, or wise) business practice to charge the customer for the software patch?
It was not my intention to side track the discussion. I just don't like the simplification of comparing with cars - but the OP made it clear that I misunderstood his post.
Not forever! Only for 10 years, after that they are no longer responsible. Software is the same way, only the timeframe is much shorter, and there is no set standard.
Although less than a year, like CS5.5 is too short. I would suggest double or triple the usual time between major versions as a reasonable timeframe, in this case that seems to be about yearly, so Adobe should provide support for 2 to 3 years for old versions.
I'll tell you.
You know that thing called a "license" that geeks are always arguing about?
Grab one of those, Adobe's or anyone else's, and find the section that is all uppercase that includes the word LIABILITY or the string LIABL.
In that section you will find your answer.
I have Photoshop CS5. I didn't event know there was a vulnerability in it. So, after all I paid for this, there is a vulnerability which lets an attacker take control of my system... and they aren't fixing it?
Seriously... what... the... fuck. I'm never buying an Adobe product again.
So, you pirate it instead. Adobe will still win out, since you'll still keep using Photoshop and are still bound to their toolkit. You'll put it on your resume, you'll be employed by a company that buys it and has to buy it legitimately. You're not punishing Adobe unless you create a genuine replacement for the toolbox of Illustrator, Fireworks, InDesign and Photoshop and are putting those on your resume, unless you're versatile with those more open-source tools, whenever they should exist.