Multiple Boeing 787s in China experienced GPS 20 years rollover issue
twitter.com
twitter.com
Are there any reasons a fleet plane might be using a different version? I'm coming up short on reasons, other than language, or maybe special hardware modifications?
I also noticed the other day that Google Maps shows static images for S. Korea (not the fancy WebGL stuff). Also due to laws.
Also many other countries demand Google Maps manipulation (USA being one of them by demanding hiding of military bases, not to mention many other border disputes over the world). So I'm not sure how authors point really links up to the difference in avionics in Boeing JUST for China.
What are those different requirements?
Typically this is done because the work required to certify a new version (either internal or external certification) is prohibitively expensive.
For core, business critical systems, a lot of large, non-technology businesses simply don't have a mirrored QA setup with enough coverage / integration simulation to work up through.
So... faced with a heavy testing price to upgrade, risk due to incomplete testing environments, and known current version behavior... a lot of businesses punt and say "We want our version + only the fix for this issue we're experiencing."
It's annoying from the software vendor side (QAing old_version + patch_x2 + patch_q5), but it absolutely makes sense from the business side.
The summary reason is: because the customer doesn't have a flexible and testable infrastructure configuration. And that's not really something a software vendor can change.
Maybe I have more faith in the 'system' than I should...
Different components could be made different companies. While flight controls and handling fly-by-wire could have been Boeing, the FMS could be (e.g.) Honeywell, GE.
The FMS, AFCS ("autopilot"), and (primary) FCS are three distinct systems per ATA iSpec 2200:
* https://en.wikipedia.org/wiki/ATA_Spec_100/iSpec_2200
Things can be more blurred with fly-by-wire, but can still be conceptually separate.
Internally, the week counter just rolled over. That's fine; all the almanac data is handled in that same format internally. Some receivers may need a reset when this counter rolls, and may need to relearn the almanac/ephemeris from the sky, but once that's done, Sunday of week 0 is just the same as any other Sunday of any other week 0.
Navigation works just fine because it's all internally consistent.
But display time, ahh, now that's where things get interesting. Sunday of week 0 could be displayed as 2019 April 7, or it could be displayed as 1999 August 22, or it could be displayed as 1980 January 6.
Knowing which epoch you're in is actually considerably trickier than working consistently internally, since there's no information in the satellite signal to tell you this, by design. It comes from applying an external offset. Receivers have lots of ways to do this, and quite a few simply have it baked in and cannot handle a rollover, so as far as they're concerned, week 0 is in 1999, period. They'll navigate just fine but they'll display the date wrong, because they're applying the wrong offset.
I understand that will require either flash or battery backed RAM, etc to keep this stored, but seems relatively trivial in most applications... (side effect would be that if the backup battery is dead or all batteries are disconnected, you would revert to 1999)
[0]: https://en.wikipedia.org/wiki/Constellation_Observing_System...
there also was a $5 pair of Bose headphones that I was stupid to not buy the instant I saw them.
The Tom Tom I have is too old to get updated maps, but it's not a problem driving around in upstate NY. In New Hampshire it might be another thing, but where I live they build new buildings but not new roads.
That's not an exaggeration for comic effect. There's literally 50 bits per second from each satellite. 6.25 bytes.
So the navigation messages are packed extremely densely. To the point that plenty of numbers don't even start on byte boundaries.
GPS relies on receiving extremely weak signals, often with a very limited receive antenna. This means there's a real trade off- you can send a limited amount of data over a given communication channel. Increasing the data rate might require increasing the transmit power / antenna gain of the GPS satellites, or requiring bigger / better receive antennas on GPS receivers.
Here are the parameters involved: https://en.wikipedia.org/wiki/Shannon%E2%80%93Hartley_theore...
GPS satellites and receivers last on the order of 20 years so it takes a long time to age out of legacy support. The latest generation of satellites, GPS-III, have a new week number format that allows for 13-bit week numbers (120 year rollover).
The reason for the low number bits in week number is simple, it's broadcast on a very low bit rate (50 bits per second) and every frame has the week number in it. So you get faster fixes if you don't pad out with useless zeros.
It should be noted that the coders could have used data windowing and pivot dates to make certain assumptions:
> When ntpd(8) receives an unresolved timestamp from an upstream server, that timestamp could be based in any era prior to the current wall-clock date - but by definition we may not know the wall-clock date with confidence yet (not having achieved sync).
> To resolve this ambiguity, NTP also uses an internal pivot date. It chooses the era that would minimize the absolute value of the time difference between the resolved timestamp and its internal pivot date.
> This resolution technique is part of the NTP specification. It will normally resolve to the current era, but may in cases where the pivot is within a half-cycle of a rollover time resolve to either the previous or the next era.
> An ntpd(8) instance’s pivot date will be the date it was compiled and built.
> It is fairly easy to see that this guarantees correct resolution if the pivot dates of the communicating ntpds are within a half-cycle (88 years) of each other, even if there is a rollover between the pivot dates.
There have been some efforts to modernize the GPS signal format. In 2014, select GPS satellites began broadcasting an additional message (CNAV) with a 13 bit week number, allowing a ~157 epoch.
Somebody wanted to save money when building the original satellites in the 1970s.
GPS used ten bits for datetime. With a week counter and seconds into that week since 6th of January, 1980. After 1024 weeks it resets back to 0. This has happened once already on 21st of August, 1999. This is the second rollover/reset of the week counter on 6th of April, 2019.
Newer versions of GPS messages use thirteen digits instead of ten digits allowing for a larger week counter (granting 8,192 weeks), causing the first rollover not to occur until the year 2137.
https://en.wikipedia.org/wiki/Global_Positioning_System#Time...
Actually, probably every 512 weeks, as it needs to know (or assume) with side of the +/- it is on:
* https://en.wikipedia.org/wiki/Serial_number_arithmetic
Roll over so often that firmware/software implementations pretty much have to take it into account.
Nit: GPS uses 29 bits for "datetime".
10 bits for the week since the epoch, and 19 bits to count the number of 1.5s intervals that have passed since the start of the week. Yes, 1.5s intervals.
See Section 2.3.5:
* https://www.gps.gov/technical/ps/1995-SPS-signal-specificati...
It's not as unusual as you'd think:
https://blog.fosketts.net/2019/04/06/gps-time-rollover-failu...
There you see a nice summary of the problem and an example a Mercedes car from, if I understood, 2008 experiencing the same type of problems. Also discussed on HN:
https://news.ycombinator.com/item?id=19593227
It's like having a Y2K bug software and saying "but that software didn't exist before 1900." It doesn't matter when the "epochs" are, it's just about what the design covered or didn't.
I've personally fixed the trading software which failed to correctly implement the correct rollover of the decades (i.e. the transition from year 9 to year 0 in the names), not to mention Y2K. It was simply tested before only "in the same decade."
It's definitely a failure in the development process, for the software that is supposed to work in some bigger time frame, and not only shortly.
Some of it's doubtless still in use and people are entering "19" as the year today, and if it's still in use in 2099 we'll have the exact same problem all over again with the exact same software.
That may seem crazy today, but people in the 1950s would have thought you were crazy if you said B-52s were still going to be flying in 2020.
There's doubtless going to be people still running Windows 95 on some emulator in 2100 to use some legacy application that keeps chugging along. Some software we use today might be in use for thousands of years or more, unlike airframes it isn't subject to any natural decay or wear.
This is why I've recently started abstracting time/date calls in all my work so that I can test using arbitrary dates/times rather than using the various "now" library calls directly.
This has already had the side-benefit of allowing me to deal with stuff like the time arbitrarily going backwards when NTP synchronises the clock. I don't typically rely on wallclock time for sequencing, this just keeps things a little more robust.