A recent software update was not successful. Your vehicle cannot be driven
twitter.com
twitter.com
I think I prepared two system partitions and a custom MBR which would alternate the system partition on every start (uses one bit of non-volatile memory to alternate selection of partitions on each boot).
When the system starts, it does self-test. If it fails the self-test it just restarts. If it succeeds -- it writes the result on its partition and then looks at the other partition. If the other partition did not succeed the test, it reports the fact back to HQ and overwrites it with the current system.
The upgrade procedure is extremely simple -- the current system writes to the other partition, then restarts. If the upgrade is interrupted at any point in time, the other system will know it was interrupted and will just restart immediately. In any case, after two restarts we are back to the system that initiated the upgrade and if it checks the other system did not start and self-tested successfully, it can redo the upgrade as many time as we want and you still have a working system.
Could it be done better? Probably it could. It took me one day to think up and implement.
I would think Ford could do it better (Edited: yes, not a Tesla)
Just to be clear, I'm firmly in the "less smart = more reliable" camp, but even a SoC resembles a distributed system nowadays, and this architecture has its merits. The GPU on my M1 Mac crashed, rebooted itself, and all I saw was 1-2s of glitched graphics - no application noticed. Of course ideally GPUs wouldn't crash, but the same could be said of cars.
The goal should be designing it in a way that failure of the more smart features does not spill to critical functionality. Or that you can use it in a degraded state sort of like fly by wire planes do.
I have no car design experience, but here is my 5-minute idea:
For starters, you build a basic car. It drives, it has basic indicators, it has ABS, etc. It has some APIs that can be connected to but there is limited ability to break the basic car through those APIs.
Then you build your smart car around it by adding to the basic car. You add on more computers, electronics, etc. But any time you rip off the smart car functionality, you still have the basic car working.
If there is a need to update software, this should really only be needed for the smart car part. But even if it fails completely, the basic car underneath should be functional and you should be able to use the car albeit without infotainment and navigation and other "stuff". You should be able to do whatever you need to do, call your mechanic and limp there to get them to sort the problem out for you.
The point isn't that the software will have no bugs.
The point is that the basic car will have much less software and much more basic software and that it is much easier to test and ensure this software is in working condition.
Also, it is absolutely not true that the basic software has to be updateable. With care, basic functionality can absolutely be completely finished.
Imagine you have been in the market with ABS controller for a decade or more. It has really simple functionality, it should be possible to just bake it and never touch it again. Or maybe a controller that takes care of basic battery protection. Or motor ESC. When the components are simple enough and well defined enough, it should be possible to "finish" the software to a state where it never again needs to be updated. Or updated only in exceptional circumstances.
What I'm saying is that no practical amount of testing and verification can eliminate the need for updates. Let me give some practical examples I've seen: a bug in the silicon vendor BSP that prevented programs from accessing half of the physical memory. In another case the vendor provided optimistic battery curves that caused safety issues in certain conditions, so changes were needed after units were already in the field. In another case, a factory was taking the stuff we were giving them and using it to build weird Frankenstein images from various binary blobs, so nothing that had been produced for those weeks corresponded to anything that had been tested.
The current free-for-all where we must put complex software into everything is killing us.
Are you disagreeing that a motor vehicle can operate without software? Or are you disagreeing that a vehicle should continue to operate when smart features are unavailable?
One example where software is practically required is the backup camera. Would you prefer a series of lenses and mirrors?
None of that should be taken to imply that a vehicle should stop operating under any remotely normal circumstances. The situation pictured should not happen to customers.
As far as NHTSA is concerned, backup cameras are just as mandatory as working brakes. You can't build a vehicle that doesn't have them, and most (all?) states prohibit operating vehicles without these features. Tesla, Mercedes, Nissan, Toyota, Honda, and Subaru have all had safety recalls because of issues with software failing to display that image properly.
Older vehicles don't comply with these newer regulations and are only allowed to operate because of grandfather clauses.
Please provide the C.F.R. link or state statute link you're talking about.
You have been given plenty of opportunities to make your case and have refused to do so. I think it's pretty clear by now that you're just being disingenuous.
California: https://casetext.com/statute/california-codes/california-veh...
Illinois: Chapter 12 at https://www.ilga.gov/legislation/ilcs/ilcs3.asp?ActID=1815&C...
Michigan: https://www.legislature.mi.gov/documents/mcl/pdf/mcl-300-194...
Your turn.
The idea that computers need software updates is just insane, and clearly fallacious. Cars worked fine without regular software updates for decades.
Both of these are obviously false. Automobiles have existed longer than automotive computers, and lots of software continues to function without updates. I suspect you're aware of both facts.
Yes, but not in SW.
"Even the perfect program still has bugs".
I know that other OEMs do variant testing, have complex SILS (software in the loop) test systems so that all potential failure scenarios are tested in software prior to update. The downside is that updates are slow to release then, with some other OEMs only putting out an update once or twice a year, but they avoid this scenario.
Software wise, the industry is moving towards defined standardized interfaces for sensors that are versioned. Example: https://blackberry.qnx.com/en/ultimate-guides/software-defin...
Back to the topic though, all major domain ECUs will have an A/B partition. Usually one of these is the OTA master, and has the capability to update the other microcontrollers via UDS. For safety critical microcontrollers that do not have a A/B partition, about half will not support OTA (this is just a thing for small MCUs), and the other half are flashable completely. So something like this is rare and should only happen on a secure boot failure or some other catastrophic scenario, which ideally your SILS system will have tested (SILS won't test all scenarios but will definitely test all failure cases).
Larger OEMs may even have HILS (hardware in the loop systems) where these things are also tested on physical hardware prior to launch, but with software defined vehicles this is slowly going away.
"You'll drive up costs for the hard-working American consumer"
"We'd have to cut salaries or fire factory workers"
"We wouldn't be able to compete against that car company from Nothereistan!"
etc.
This was why infotainment systems lagged the state of the art for so long - they were apparently shipping components that would have belonged in a smartphone from more than half a decade before.
In this case, I believe we had a few phones get A/B updates by Android 7, which was late 2016. Giving it a year or so to filter to more CPU chipsets, that would mean (if the old rule held true), we would expect to see A/B hitting new cars in the next year or two. This assumes auto makers are using enough of the Android BSP to get the bootloader with A/B (which isn't a given), and then that they use it!
Anyone with any experience of auto software know if the teams doing software are experienced and understand the platform side of things, or if it's a traditional front-end heavy "crunch release" type affair? I've seen some pretty poor quality infotainment systems in the past, so my assumption is inexperienced devs with limited platforms knowledge, focused on "get it working to ship it", but would be interesting to hear from anyone with experience of how this really goes down.
(Not like the subsubsupplier of that module even specced the extra flash memory for A/B update, hah)
https://www.pentestpartners.com/security-blog/reverse-engine...
And this is their decade old architecture. If you watch some cybertruck videos you’ll see it is much more elegant now.
Calling out Tesla as a model for excellent software is insulting to SW that's actually quality.
What Tesla SW has and others lack, is a great "wow" factor, which consumers who don't get to see how the sausage is made, mistakenly associate with 'quality' because it behaves like their iPad, but don't know all the skeletons in that closet.
Tesla is very good at automotive software engineering.
You're making it sound like that mistake was an "I spilled my coffee on you boo-boo" and not a terrible engineering decision that should not have passed anyone with actual experience in the embedded industry, let alone a team. If this is the kind of engineering oversights that ends up in Tesla SW, only God knows what else they have lurking in there that hasn't yet reared its ugly head.
>Tesla is very good at automotive software engineering.
Citation needed. Repeating something doesn't make it true.
Tesla obviously has excellent software, but I’m interested in what you’d consider to be excellent software, and which companies would meet your absurd and non-sensical expectations.
Please name some companies that meet your standards.
It's also not something Tesla does better; numerous security researchers have bypassed that gateway.
Since you bring up Tesla: used to be that Tesla control units would fail after a certain number of drive time hours because they did so much logging to the flash chips they'd wear them out.
In a vehicle which is highly connected and basically should never lose power most of its life, they were writing logs to flash memory. Anyone who has done embedded work can tell you how stupid an idea that is.
https://www.tesla.com/support/8gb-emmc-recall-frequently-ask...
I understand EMMC/Flash is a bad idea, but what is the better approach, a HDD/SSD?
Ideally, the update should be done by independent agencies, so they can make sure the software is tested and they can properly inform the user (something which we already know companies don't always do).
The way it is now, it is all too easy for a company to decide to push a quick fix for a problem that really needs a more careful approach (but which might cost the company money).
That way, I am more convinced that the software engineers of the car manufacturer won't push any quick fixes that might cause bigger problems later.
In the case of urgent problems, the correct response is to ground the fleet. This will cost the manufacturer money, but I'm a software engineer for long enough to know that a quick fix won't be a safer solution.
What is the difference between this and "No Deploy Fridays"?
It’s a 3 ton (+) machine with people paying attention less each passing day. It should be taken very seriously.
This seems far better than having an agency ad hoc review every single specific software update to vehicles - would people at the agency review the code? Do they write automation? Do they do manual verification?
Running out of disk space pops up time and again. I've often wondered why software fails so often in this situation. But it's because the basic components of the system start to break -- things like "Call with temporary file" stop working, because creating a tempfile fails. And usually you're writing that code precisely in a spot where it assumes it can't fail.
This just happened on my PS5. I thought I'd play a bit of Armored Core 6 over Christmas, so I sat down and was greeted by "Can't start game." There was a pending update which couldn't be installed. So I skipped update; same error. But now the update was skipped, so it wouldn't even try to reinstall it. I ended up having to reinstall the whole game. Never seen a PS5 game completely brick itself like that.
Disk space woes are also one of the primary reasons websites go down. Ever forget about a server for two years and suddenly see your service break? It's almost always because the process ran out of file handles (resource leak) or because it ran out of disk space (hello imagemagick tempfiles).
Of course, the bug here could be completely different, but disk space errors are so common that it's as good a guess as any. Computers don't do well when you're out of disk space. MacOS freezes and bluescreens instead of going to sleep, because it can't save the hibernation file to disk. PS5 media recording stops working, because the hour-long recording backlog no longer has room to write the video to disk. This software update obviously passed their unit tests, but failed in this particular case; disk space is one of the few variables that they probably didn't test for.
I wish it were easier to write unit tests for all possible out-of-space situations. There are just so many. Even if it technically doesn't break, it often craps up the experience so much that the user ends up wondering why the software is so bad.
Out of drive space is the worst, though. Like you say, most things don't handle it, they just plough headlong into an install and then die, leaving the whole drive in a horrible unknown mess of files where you might or might not be able to retry the operation, and you might or might not have used up the last few bytes on the drive and now for some reason when you try to reboot it can't even boot the system up because it can't write some temp file it needs.
I get annoyed at people who put in the smallest possible disk, when a disk 4x larger would cost another $10.
While demoing the transfer, He asked "What happens if I disconnect this right now?".... I didn't know, and said so.
I week later it was bulletproof... you could unplug it any time you wanted, and never lose data.
That was the days of MS-DOS.
So, here we are, 30+ years later, and computers are nowhere near as constrained as they were back then.
I don't understand how Ford could even allow a screen like that to exist. It's a big red flag saying "Never buy a Ford again, they're unreliable"
EVs get attention as disruptors
My immediate question upon seeing the headline was: Which EV brand are we talking about? Evidently it's not Tesla, because if it had been, the headline would have mentioned it, no doubt. It's a Ford, in case you're wondering. Shame on Ford!
Ford and all other automakers are learning the old-fashioned way that making truly great user-facing software is... harder, slower, and costlier than they expected.
Cars have constantly gotten harder to repair, more brittle, and if a repair is needed, you often have to, instead of being able to swap out a $5 component, replace larger components that the $5 component is part of. This is by design as replacement parts is a high margin revenue source for the car manufacturers.
Why should the software side of things be any different?
Programming pays better than civil engineering or mechanical engineering.
The software team pays better than the hardware team, and programming in support of hardware pays like hardware. When asked why, the answer is: "Software is more valuable because it's closer to revenue." And: "Software has no cost after it has been written once." No manger or engineer can explain what this phrase means, but it's taken as conventional wisdom.
well not if you're running a server.
Cars have had computers controlling them for decades and didnt have these problems. What's happening now is auto makers are adopting the silicon valley way of doing things which worked ok for webapps but is horrible for hard goods.
I also replaced my own headlight and had to run a software update to initialize the new part. I called a service center and had a software update in less than an hour. Try that at Audi.
Do you do understand that failing those inspections doesn’t necessarily have anything to do with the car, right? Tires, wiper blades, or even rust on rotors (due to only using regenerative braking) will cause a fail.
Having owned Mercedes, Audi, Toyota, Porsche, Range Rover, my Teslas have been the most reliable vehicles I’ve ever owned.
Not a single mechanical issue over 4 cars and hundreds of thousands of miles.
Also the scrutiny Tesla has received at the start of it's operations might be quite a bit more than the other makers.
I'm hearing Kia/Hyundai's needing a replacement battery are having to wait months if not up to a year, while new ones sell away.
Buying a used EV will become like buying a used ICE car - there are ways to do it well, and ignoring either is at your peril... and no guarantee a brand new one will be reliable, nor the warranty performant when needed.
https://teslamotorsclub.com/tmc/threads/my-car-is-bricked-by...
https://old.reddit.com/r/TeslaLounge/comments/112oqln/new_te...
https://teslamotorsclub.com/tmc/threads/failed-software-upda...
https://old.reddit.com/r/TeslaLounge/comments/qt0ekf/2021_mo...
Also, my experience with Audi and BMW are that community tools exists to let you flash modules and change settings all on your own. Try that on a Tesla.
Tesla is way ahead on software imo, but I don’t want my car to be like modern smartphones where they’re dependent on the manufacturer to maintain and keep working.
Are we going in the future to have to call a service center for a software update when we replace a floor mat or a windshield wiper?
You don’t need to do any coding when replacing bulbs (assuming the car has bulbs) - we’re talking about the entire headlight, which has modules that require coding. This has been true as far back as 1999, when my BMW needed its HID module flashed.
As for bulbs themselves, even a base corolla now has LED headlights that you won’t be replacing yourself.
I suppose one could consider a Toyota Corolla to be an “expression of your ego”, but I’m not sure who would.
I don't even try it anymore and just bring a vanilla charger and pipe audio to the car via bluetooth (which generally works without issue on every car I've tried) and the phone for actual navigation
The auto maker needs to use micro controllers with larger flash memories, or write simpler code.
Don't they know about A and B images ???.
They cheaped out to ensure their flash memory is adequate for restoring from a bad update.
A lot of the actual mechanical/engine related software really does help a tremendous amount. Even something like ABS can be improved with more sensors to help sense exactly what's going on when you need to stop to prevent yourself careening through a barrier and down a cliff in bad weather.
This screen is actually result of alternative boot in dual boot image, but it's not A/B system but system/recovery.
This is valid solution when there is not enough space to fit second full os in available storage. Recovery allows for repeating update of major system.
Another potential issue is that car is composed of multiple connected systems and one "main" computer, it will try to upgrade everything else to the one expected version that was tested with this release. Something failed in secondary module that does not support a/b systems (3rd party?)
Another possibility, update is composed of update and verification of secondary modules and verification is not passing, because update is passing there is not really good way to recover now, because maybe flash is now damaged.
edit: usually all components in car communicate using canbus (including software updates) this usually works in this way: You first switch device into flashing mode by sending speciall command, it will then jump to special mini application that will write new bytes to flash and finally you finalize to reboot. In case something in flashing went wrong and device is crash looping or stuck in infinite loop or in any other way is not able to finish boot, you cannot retry anymore because there is no way to put it again into flash mode as its not able to receive canbus messages anymore. If that is critical component the safest thing to do is prevent car from driving
Looks like the Mach-E
Enjoy
She knows how to change this, repair that, fit whatever and is very happy doing that. But she also knows that as a female if she goes into any garage for a 'diagnostic' she will be overcharged. In fact even for something normal with a 'non-computer' car she will be overcharged.
Cars without computers are like gold.
Given that ECUs / microprocessors have been standard on cars since the late 60s / early 70s.
For me it’s the network connections and updates that scare me. The software on my ‘99 Benz hasn’t changed in 24 years, and I don’t need it too.
Microprocessors didn't exist until the early 70s. Late 70s / early 80s is when they started becoming common in cars.
I see VW advertising a car with an ECU in 1968, but likely just transistors.
It would be dangerous, because various driver warning systems and such would not be possible. System that are having a significant impact on per-mile safety for vehicle occupants (road safety for vulnerable road users has plunged.)
It would not be economically viable to operate, because engines are efficient as they are thanks to things like variable valve timing, direct injection, and so on. Some ECUs can sense how good the combustion was on a particular firing cycle via resistance across the spark plug after the ignition event. None of that would be possible with a "dumb" car.
It would also not be economically feasible to repair, because the diagnostic time would be crazy. Trying to diagnose "dumb" cars from the 80's and 90's was a nightmare. You could spend hours just trying to figure out what was wrong in a maze of wiring, relays, resistive packs, analog sensors, vacuum lines, etc. Dealerships are staffed by low-level techs, people on their way to something else or starting their own shop. Car companies couldn't possibly train them on all the intricacies of analog "dumb" car technology anymore.
Now? I plug in a OBD2 wireless module, tap "scan" on my phone, drink a cup of tea while it systematically talks to every module in the car, and I not only get fault codes, they've likely got time and mileage stamps, an indication of whether they were intermittent or continuous.
I can trigger a test on a component.
I can see what the ECU or body control module THINKS is going on versus what's actually going on.
I can tell the body control module to adapt to a new analog sensor.
all without needing to so much as pop the hood, remove a single screw, or upholstery clip.
It's a fucking dream.
The shittiness in "smart" cars is because legislation in the US hasn't kept pace with technology, and that is because legislation and regulation in the US is dominated by corporate interests.
I know it's easy to imagine that the product you think is "a car" is finished, but product categories evolve. People want their devices to do different things today than they did 20 years ago, and next year will be more changes. Connectivity isn't going away, the market has spoken.
Reliability and repairability going down is not "evolution" in any sense.
And the market hasn't really said anything when those things have been pushed into consumers without much choice. Saying "the market has spoken" in this case is like saying the market has spoken when someone claims that slapping a fruit logo is enough to sell computers. Turns out the choice of which car to buy is non-binary, it's not "internet connected" vs "non internet connected".
Having an interface to turn seat heating on/off if simple stuff. Having the upgradeability, DRM, the subscription thing, and circumvention protection is significantly more complicated.
Sure. And Ford messed up. But the request upthread wasn't for a vehicle with robust software update semantics, it was for a vehicle without connectivity. That's not going to sell well.
In the sense that a market is made up of buyers and sellers, and the sellers have decided to offer no other option yes.
I think the issue is more of the design and ownership of these things. No one wants an update bricking their car. I doubt a lot of people here would object to a discrete subsystem where you could poll charge status, turn on heating etc.
Whatever your line is in the sand for tech integration, you have many great options from before that point.
Would you also propose a calculator as a valid alternative to a locked down tablet/phone/pc that you can't install your own software on?
People want modern cars, modern TVs and modern computers. They don't want a steam engine. But modern doesn't mean "crap that the manufacturer can brick remotely".
https://foundation.mozilla.org/en/blog/privacy-nightmare-on-...
I want to have the final say about what happens with the things I own. I want to be able to rely on them.